C# 如何使用ITestFilterService和/或ITestFilterBuilder以编程方式为NUnit 3创建自定义筛选器

C# 如何使用ITestFilterService和/或ITestFilterBuilder以编程方式为NUnit 3创建自定义筛选器,c#,f#,nunit,nunit-3.0,C#,F#,Nunit,Nunit 3.0,TLDR:如何基于部分测试名、正则表达式或(部分)类别名以编程方式过滤NUnit 3.x测试 我正在转换一个项目,它有自己的过滤机制来运行NUnit2.6->NUnit3.8中的测试 我尝试支持的过滤器是名称上的部分字符串匹配、正则表达式匹配、名称匹配和类别匹配。由于这个项目有大约30k+的测试,其中一些测试非常耗时,一个定制的运行程序已经证明有助于保持我们的理智 然而,我似乎看不见森林中的树木。我试着在上阅读文档,它基本上链接到接口的源代码。在我看来,我需要和ITestFilterServic

TLDR:如何基于部分测试名、正则表达式或(部分)类别名以编程方式过滤NUnit 3.x测试

我正在转换一个项目,它有自己的过滤机制来运行NUnit2.6->NUnit3.8中的测试

我尝试支持的过滤器是名称上的部分字符串匹配、正则表达式匹配、名称匹配和类别匹配。由于这个项目有大约30k+的测试,其中一些测试非常耗时,一个定制的运行程序已经证明有助于保持我们的理智

然而,我似乎看不见森林中的树木。我试着在上阅读文档,它基本上链接到接口的源代码。在我看来,我需要和
ITestFilterService
以及
ITestFilterBuilder
,但我似乎被卡住了

NUnit2.6附带了一系列预定义的过滤器,我只需要扩展这些过滤器。现在,我赞同将test runner API与NUnit框架分离的新方法,我在文档中也没有问题,但它们似乎很稀少(或者说我缺乏搜索技能)

我做到了以下几点(F代码,从C代码翻译过来),但后来我陷入了困境:

let path=Assembly.getExecutionGassembly().Location
let package=新测试包(路径)
package.AddSetting(“WorkDirectory”,Environment.CurrentDirectory)
让engine=TestingInActivator.CreateInstance()
让filterService=engine.Services.GetService()
让filterBuilder=filterService.GetTestFilterBuilder()
我甚至不知道它是否有效,因为在重构整个项目之前我无法运行它。。。
ITestFilterBuilder
有三种方法,
AddTest
GetFilter
选择where
。但这些都是字符串,我不知道该放什么进去

似乎我需要一个
whereClause
,但在工具提示、intellisense或任何地方都没有关于使用什么语法(SQL?XPath?)的帮助


有人有什么想法吗?有些项目有一些预定义的过滤器,我可以使用,或者有一些示例代码?

如果你像这样传递一个空的过滤器,你可以知道应该向过滤器添加什么:

var filterService = nunitEngine.Services.GetService<ITestFilterService>();
ITestFilterBuilder builder = filterService.GetTestFilterBuilder();
....
var testResult = runner.Run(testListener, filter);
其中一个公共方法是
ITestFilterBuilder.AddTest(字符串全名)

参数
fullName
与返回的XML的
fullName
属性匹配。如果我们从一个out
节点传入
全名
,我们就能够运行该测试:

builder.AddTest("SampleUnderTest.Tests.NUnit.Tests.AddWithGivenInputsReturnsExpectedResults");

当我们再次运行时,根目录上的结果告诉我们已经运行了多少测试,通过了多少测试,失败了多少测试,等等,以及关于它的各种其他统计信息。

一个有趣的方法,尽管要做一个实际的筛选,我至少还需要一个所有可用测试的列表。但这给了我一个很好的处理有一个新的看看这个,谢谢!
ITestFilterBuilder builder = filterService.GetTestFilterBuilder();
builder.AddTest("SampleUnderTest.Tests.NUnit.Tests.AddWithGivenInputsReturnsExpectedResults");