0

我正在尝试使用控制台程序执行用 c# 编写的 Nunit 测试用例。到目前为止,我尝试了不同的方法来做到这一点,但无法找到实现相同目标的完美方法。

方法 1:使用 NUnitTestAdapter 包。此软件包较旧,无法运行使用最新 nunit 版本 3.2.1 创建的测试。但它适用于 2.6.4 等旧版本

在解决方案中添加了 NUnitTestAdapter 包然后尝试了以下代码

CoreExtensions.Host.InitializeService();
        TestSuiteBuilder builder = new TestSuiteBuilder();
        TestPackage testPackage = new TestPackage(@"path to dll");
        RemoteTestRunner remoteTestRunner = new RemoteTestRunner();
        remoteTestRunner.Load(testPackage);
        TestSuite suite = builder.Build(testPackage);
        TestSuite test = suite.Tests[0] as TestSuite;
        var numberOfTests = ((TestFixture)test.Tests[0]).TestCount;
        int i = 0;
        foreach (TestMethod t in ((TestFixture)test.Tests[0]).Tests)
        {
            Console.WriteLine(t.TestName.Name);
            //TestName testName = ((TestMethod)((TestFixture)test.Tests[0]).Tests[i]).TestName;
            TestFilter filter = new NameFilter(t.TestName);
            TestResult result = test.Run(new NullListener(), filter);
            ResultSummarizer summ = new ResultSummarizer(result);
            NUnit.Core.NUnitFramework.Assert.AreEqual(1, summ.ResultCount);
            i++;
        }

我可以得到这个的任何更新版本,那么这将是一个很好的解决方案。

方法二:使用 Nunit3-console

在我的项目中添加了对 nunit3.console.exe 的引用并尝试使用以下代码

string path = @"path to dll";
NUnit.ConsoleRunner.Program.Main(new[] { path });

这会引发错误,提示“程序集不包含测试或未找到正确的测试驱动程序”

谁能让我知道我们如何使用执行日志运行测试?

4

1 回答 1

1

这不是 NUnit 的工作方式。

在第一个示例中,您使用的是 NUnit 2.x 的内部类和方法,它们没有被记录为一般用途。它们碰巧被宣布为公开的,因为这是我们过去对我们自己的测试调用的所有方法的标准做法。此外,您使用 NUnit 测试适配器没有任何意义,因为该包用于将 NUnit 连接到 Visual Studio 测试窗口。我怀疑它对你有用,因为它引入了你实际使用的 nunit.core 程序集。

在第二个示例中,您直接调用 main。你已经发布了一个关于这个不起作用的 nunit 问题,所以我不会详细说明。我只想说,通过引用它并调用它的 main 来运行独立程序仅适用于最简单的情况。对于像控制台运行器这样动态加载各种程序集的程序来说,它不一定能工作。

NUnit 3 为运行测试提供了一个已发布的 API。这是人们多年来要求我们做的事情。终于到了!为什么不使用它?查看 nunit 3 文档以获取有关测试引擎及其 API 的信息。如果您出于某种原因想以编程方式运行测试,这就是这些天的方式。

当然,您可以自由地继续尝试使您采用的方法发挥作用,我会根据需要继续发表评论。我只想让以后发现这篇文章的人清楚,这不是 NUnit 的设计用途。

于 2016-05-24T13:18:07.340 回答