【问题标题】:Running NUnit tests from code (programatically)从代码运行 NUnit 测试(以编程方式)
【发布时间】: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'."

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

至于我的第二个问题,是否可以使用RemoteTestRunnerTestCaseSource 传递给测试,或者必须明确地将其写入.dll(在RemoteTestRunner 中加载之前),如下所示:

    [Test, TestCaseSource(typeof(UserProvider), "ProvideUsers")]
    public async Task ExportPPTTimeTestAsync(User currentUser)
    {...

【问题讨论】:

  • 再次重新安装您的(或 Nuget)包。或者检查兼容性版本问题。确保它应该正确构建。

标签: c# .net nunit


【解决方案1】:

我猜你在网上找到了一些以编程方式运行 NUnit 的说明——甚至可能是我多年前写的一些说明。您应该始终对旧文章持怀疑态度。

在这种情况下,我们知道您正在使用 RemoteTestRunner 一个来自 NUnit V2 核心的类,它是遗留代码还是过时代码,具体取决于您如何看待它。 ILogicalThreadAffinitive 的问题只是冰山一角。 nunit.core 包永远不会运行现代 NUnit3 代码,甚至无法加载 .NET Core 程序集。

如果您想在 Web 上运行针对当前版本的 NUnit 在 .NET Core 下编写的代码,此时最好的办法是直接从您自己创建的驱动程序调用 NUnit 框架 API。 GitHub 上最新版本的 NUnit3 控制台项目中包含的驱动程序源代码可以让您了解它是如何完成的。

不幸的是,这样的项目有点大,所以我不能在这里为你发布示例代码。如果您决定尝试它,请先检查 NUnit3 框架驱动程序的源代码,它是 GitHub 上的 nunit3 控制台运行程序项目的一部分。如果遇到问题,请发布具体问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-04
    • 1970-01-01
    • 2011-05-04
    • 1970-01-01
    • 1970-01-01
    • 2021-09-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多