MSTest 語法紀錄
Unit Test, MSTest
單元測試範例
using Microsoft.Extensions.Configuration;
using Vista.DbPanda;
namespace TestPanda;
[TestClass]
public class UnitTest1 : TestBase
{
[TestMethod("同步連接DB")]
public void TestMethod1()
{
var connString = Configuration.GetConnectionString("DefaultConnection");
Assert.IsNotNull(connString);
var proxy = new ConnProxy(connString);
using var conn = proxy.Open();
}
[TestMethod("非同步連接DB")]
public async Task TestMethod2()
{
var connString = Configuration.GetConnectionString("DefaultConnection");
Assert.IsNotNull(connString);
var proxy = new ConnProxy(connString);
using var conn = await proxy.OpenAsync();
}
}
另一個案例
using Vista.Models;
namespace ZPlaywrightTestProject;
[TestClass]
public class UnitTest_Vista_DB_Utils
{
[TestMethod]
public void Test_Clsx()
{
Assert.AreEqual("foo",
Utils.Clsx("foo", true));
Assert.AreEqual("",
Utils.Clsx("foo", false));
Assert.AreEqual("base foo",
Utils.Clsx("base", "foo", true));
Assert.AreEqual("base",
Utils.Clsx("base", "foo", false));
Assert.AreEqual("base base2 foo bar",
Utils.Clsx("base base2", ("foo", true), ("bar", true)));
Assert.AreEqual("base base2 bar",
Utils.Clsx("base base2", ("foo", false), ("bar", true)));
Assert.AreEqual("base base2",
Utils.Clsx("base base2", ("foo", false), ("bar", false)));
Assert.AreEqual("",
Utils.Clsx(null!, ("foo", false)));
Assert.AreEqual("foo show-me",
Utils.Clsx(null!, ("foo", true), "show-me"));
//Class=@Utils.Clsx(("mud-input-required", Required), Class!)
Assert.AreEqual("mud-input-required show-me",
Utils.Clsx(("mud-input-required", true), "show-me"));
Assert.AreEqual("mud-input-required",
Utils.Clsx(("mud-input-required", true), null!));
Assert.AreEqual("show-me",
Utils.Clsx(("mud-input-required", false), "show-me"));
Assert.AreEqual("",
Utils.Clsx(("mud-input-required", false), null!));
}
[TestMethod]
public void Test_UrlCombine()
{
Assert.AreEqual("http://foo.com/",
Utils.UrlCombine("http://foo.com/"));
Assert.AreEqual("http://foo.com/foo/bar/baz",
Utils.UrlCombine("http://foo.com", "foo", "bar", "baz"));
Assert.AreEqual("http://foo.com/foo/bar/baz/",
Utils.UrlCombine("http://foo.com/", "/foo/", "/bar/", "/baz/"));
Assert.AreEqual("http://foo.com/foo/baz",
Utils.UrlCombine("http://foo.com", "foo", null!, "baz"));
Assert.AreEqual("http://foo.com/foo/baz",
Utils.UrlCombine("http://foo.com", "foo", string.Empty, "baz"));
Assert.AreEqual("http://foo.com/foo/baz",
Utils.UrlCombine("http://foo.com", "foo", "", "baz"));
Assert.AreEqual("http://foo.com/foo",
Utils.UrlCombine("http://foo.com", "foo", string.Empty));
}
}
商業邏輯測試範例
using Microsoft.Extensions.DependencyInjection;
using Vista.Biz.DEMO;
using Vista.Models;
namespace ZPlaywrightTestProject;
[TestClass]
public class BizTest_DEMO009Biz : BizTestBase // ※有基礎類別
{
[TestMethod]
public void Test_QryDataList()
{
var bizSvc = scope.ServiceProvider.GetRequiredService<DEMO009Biz>();
var dataList = bizSvc.QryDataList(new DEMO009QryArgs());
Assert.IsTrue(dataList.Count > 0);
}
[TestMethod]
public void Test_QryDataList2()
{
Assert.AreEqual("foo", "foo");
}
}
class ATestUser : IAuthUser
{
public AuthUser? GetCurrentUser()
{
return new AuthUser
{
UserId = "itest",
UserName = "艾測試",
AuthMenu = new()
};
}
public Task<AuthUser?> GetCurrentUserAsync()
{
return Task.FromResult(this.GetCurrentUser());
}
}
安裝套件Microsoft.Extensions.Configuration.Json
以讀取appsettings.json
組態檔。
PM> NuGet\Install-Package Microsoft.Extensions.Configuration.Json
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Vista.Biz.DEMO;
using Vista.Models;
namespace ZPlaywrightTestProject;
/// 把測試需要的共用資料統一處理
[TestClass]
public abstract class BizTestBase
{
// singleton
protected static IConfigurationRoot config = default!;
protected static ServiceProvider serviceProvider = default!;
// scope
protected IServiceScope scope = default!;
[AssemblyInitialize]
public static void AssemblyInitialize(TestContext testContext)
{
//# 可自 appsettings.json 取測試組態參數
// 需安裝套件: Microsoft.Extensions.Configuration.Json。
var configBuilder = new ConfigurationBuilder()
.SetBasePath(AppContext.BaseDirectory)
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
config = configBuilder.Build();
//# 註冊 DB 連線
Vista.DB.DBHelper.CONNSEC = new Vista.DbPanda.ConnProxy(config.GetConnectionString("DefaultConnection")!);
//# 註冊 DI 服務
var services = new ServiceCollection();
services.AddLogging();
//services.AddSingleton<IConfiguration>(config);
services.AddScoped<IAuthUser, ATestUser>();
services.AddScoped<DEMO009Biz>();
//# 引入 AOP
serviceProvider = services.BuildServiceProvider();
Vista.Biz.AOP.ServiceActivator.Configure(serviceProvider);
}
[AssemblyCleanup]
public static void AssemblyCleanup()
{
serviceProvider?.Dispose();
serviceProvider = null!;
}
/// <summary>
/// 每個測試都會跑一次啟用
/// </summary>
[TestInitialize()]
public void TestInitialize()
{
scope = serviceProvider.CreateScope();
}
/// <summary>
/// 每個測試都會跑一次清除
/// </summary>
[TestCleanup()]
public void TestCleanup()
{
scope?.Dispose();
scope = null!;
}
}
(EOF)
Last updated