运行 来自代码的 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'."

而且我不知道为什么会这样。有什么想法吗?

至于我的第二个问题,是否可以通过 RemoteTestRunnerTestCaseSource 传递给测试,或者它必须明确地写入 .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 具体问题如果你运行 成问题。