运行 来自代码的 NUnit 测试(以编程方式)
Running NUnit tests from code (programatically)
我想 运行 从我的代码中进行 NUnit 测试。更具体地说,我有一个 Web API(.net 核心)接收一组需要 运行 的测试名称,在 运行 之后,端点将 return结果集。
测试在另一个 .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 中(在 [= 中加载之前) 15=]) 像这样:
[Test, TestCaseSource(typeof(UserProvider), "ProvideUsers")]
public async Task ExportPPTTimeTestAsync(User currentUser)
{...
我猜您在 Web 上找到了一些 运行ning NUnit 编程说明 - 甚至可能是我多年前写的一些说明。您应该始终以怀疑的眼光看待旧文章。
在这种情况下,我们知道您使用的是来自 NUnit V2 核心的 RemoteTestRunner
和 class,根据您的看法,它是遗留代码或过时代码。 ILogicalThreadAffinitive
的问题只是冰山一角。 nunit.core
包永远不会 运行 现代 NUnit3 代码,甚至不能加载 .NET Core 程序集。
如果您想 运行 在 .NET Core 下针对 Web 上当前版本的 NUnit 编写代码,此时最好的选择是直接从驱动程序调用 NUnit 框架 API你创造你自己。 GitHub 上最新版本的 NUnit3 控制台项目中包含的驱动程序源代码会让您了解如何完成它。
不幸的是,这样的项目有点大,所以我不能在这里 post 示例代码。如果您决定尝试一下,请先检查 NUnit3 框架驱动程序的源代码,这些驱动程序是 GitHub 上的 nunit3 控制台 运行ner 项目的一部分。 Post 具体问题如果你运行 成问题。
我想 运行 从我的代码中进行 NUnit 测试。更具体地说,我有一个 Web API(.net 核心)接收一组需要 运行 的测试名称,在 运行 之后,端点将 return结果集。
测试在另一个 .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 中(在 [= 中加载之前) 15=]) 像这样:
[Test, TestCaseSource(typeof(UserProvider), "ProvideUsers")]
public async Task ExportPPTTimeTestAsync(User currentUser)
{...
我猜您在 Web 上找到了一些 运行ning NUnit 编程说明 - 甚至可能是我多年前写的一些说明。您应该始终以怀疑的眼光看待旧文章。
在这种情况下,我们知道您使用的是来自 NUnit V2 核心的 RemoteTestRunner
和 class,根据您的看法,它是遗留代码或过时代码。 ILogicalThreadAffinitive
的问题只是冰山一角。 nunit.core
包永远不会 运行 现代 NUnit3 代码,甚至不能加载 .NET Core 程序集。
如果您想 运行 在 .NET Core 下针对 Web 上当前版本的 NUnit 编写代码,此时最好的选择是直接从驱动程序调用 NUnit 框架 API你创造你自己。 GitHub 上最新版本的 NUnit3 控制台项目中包含的驱动程序源代码会让您了解如何完成它。
不幸的是,这样的项目有点大,所以我不能在这里 post 示例代码。如果您决定尝试一下,请先检查 NUnit3 框架驱动程序的源代码,这些驱动程序是 GitHub 上的 nunit3 控制台 运行ner 项目的一部分。 Post 具体问题如果你运行 成问题。