以编程方式运行单独的 NUnit 测试

6
我需要以编程方式运行单个C# NUnit测试。 我发现另一篇文章非常有帮助,向我展示了如何以编程方式运行整个测试集,但我需要能够选择个别测试。
我认为设置NameFilter可以解决问题,但RemoteTestRunner似乎只认为我的套件中只有一个测试,当实际上有超过五十个测试。 它真的将所有测试合并到一个巨大的测试中吗? 有没有方法可以将它们分开并运行单个测试用例?

你所说的“以编程方式运行”具体是什么意思?你是指启动另一个进程并通过命令行传递命令来运行某些测试,还是以其他方式进行? - Zipper
我的意思是编写代码,通过调用函数来执行单元测试:CoreExtensions.Host.InitializeService();TestPackage testPackage = new TestPackage(@"C:\Dev\MyUnitTests.dll");RemoteTestRunner remoteTestRunner = new RemoteTestRunner();remoteTestRunner.Load(testPackage);TestResult testResult = remoteTestRunner.Run(new NullListener(), TestFilter.Empty, false, LoggingThreshold.Error); - Huitzilopochtli
1
基本上我想做的是编写代码,运行单元测试并将结果存储在某个数据结构中。我希望能够编写执行 NUnit 测试的代码,而不是从命令行或 GUI 运行测试。我已经从我链接的帖子中得到了代码,可以向我展示如何以编程方式运行给定套件中的每个测试,但我希望能够运行套件中选择的测试。 - Huitzilopochtli
1
你解决了这个问题吗?我也遇到了同样的问题,使用TestName传递我的单独测试,但它总是返回不确定。 - pengibot
2个回答

1

我也必须通过一个过滤器,只是执行

TestResult testResult = remoteTestRunner.Run(new NullListener(), null , false, LoggingThreshold.Error);

出现了NullReferenceException异常。我迅速创建了一个空过滤器。

class EmptyFilter : TestFilter
{

    public override bool Match(ITest test)
    {
        return true;
    }
}

并将其传递给remoteTestRunner
TestResult testResult = remoteTestRunner.Run(new NullListener(), new EmptyFilter() , false, LoggingThreshold.Error);

那很好。可以投资一点时间搜索一下,看看 NUnit 是否已经有类似的过滤器可供重用,而不是创建一个自定义的过滤器。

0

我必须使用SimpleNameFilter并将要运行的单元测试的名称传递给它的构造函数。这是我的代码:

SimpleNameFilter filter = new SimpleNameFilter("Google.Maps.Test.Integrations.GeocodingServiceTests.Empty_address");
TestResult testResult = remoteTestRunner.Run(new NullListener(), filter, false, LoggingThreshold.Error);

你可以通过从测试本身中找出或查看 NUnit 程序中测试的属性来获取完全限定的测试名称。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接