【发布时间】:2021-07-01 21:42:00
【问题描述】:
我想从我的代码中运行 NUnit 测试。更具体地说,我有一个 Web API(.net 核心),它接收需要运行的一组测试名称,运行后,端点将返回一组结果。
测试在另一个 .dll 中(另一个使用 Microsoft.Playwright 和 Serilog 登录到 ElasticSearch 的项目 - 它也是 .net 核心,但它的类标记为 [TextFixutre])。
起初,我只是想检查RemoteTestRunner 是否正在加载我的所有测试
这是演示代码:
[HttpPost]
[Route("/api/TestSuiteRun/Run")]
public IActionResult RunTestSuite([FromBody] AutomationAPI.Models.TestSuite testSuite)
{
try
{
CoreExtensions.Host.InitializeService();
TestSuiteBuilder builder = new TestSuiteBuilder();
TestPackage testPackage = new TestPackage(@"C:\Desktop\Automation-v2\Automation-v2\bin\Debug\netcoreapp3.1\Automation-v2.dll");
RemoteTestRunner remoteTestRunner = new RemoteTestRunner();
remoteTestRunner.Load(testPackage);
NUnit.Core.TestSuite suite = builder.Build(testPackage);
NUnit.Core.TestSuite test = suite.Tests[0] as NUnit.Core.TestSuite;
var numberOfTests = ((TestFixture)test.Tests[0]).TestCount;
foreach (TestMethod t in ((TestFixture)test.Tests[0]).Tests)
{
Console.WriteLine(t.TestName.Name);
}
return StatusCode(200);
}
catch(Exception ex)
{
Console.WriteLine(ex.Message);
return StatusCode(500);
}
}
但我在remoteTestRunner.Load(testPackage) 行遇到以下异常:
"Could not load type 'System.Runtime.Remoting.Messaging.ILogicalThreadAffinative' from assembly 'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'."
我不知道为什么会这样。有什么想法吗?
至于我的第二个问题,是否可以使用RemoteTestRunner 将TestCaseSource 传递给测试,或者必须明确地将其写入.dll(在RemoteTestRunner 中加载之前),如下所示:
[Test, TestCaseSource(typeof(UserProvider), "ProvideUsers")]
public async Task ExportPPTTimeTestAsync(User currentUser)
{...
【问题讨论】:
-
再次重新安装您的(或 Nuget)包。或者检查兼容性版本问题。确保它应该正确构建。