C# 将NUnit TestRunner与xml筛选器一起使用

C# 将NUnit TestRunner与xml筛选器一起使用,c#,nunit,nunit-3.0,C#,Nunit,Nunit 3.0,我试图使用nunits测试引擎/测试运行程序来运行特定的测试,但不知何故,我无法让过滤器工作(如果我使用空过滤器,它将运行我的测试) 这是迄今为止的代码: var package = new TestPackage("path/to/dll"); package.AddSetting("WorkDirectory", Path.GetDirectoryName("path/to/dll")); using (ITestEngine engine

我试图使用nunits测试引擎/测试运行程序来运行特定的测试,但不知何故,我无法让过滤器工作(如果我使用空过滤器,它将运行我的测试)

这是迄今为止的代码:

        var package = new TestPackage("path/to/dll");
        package.AddSetting("WorkDirectory", Path.GetDirectoryName("path/to/dll"));

        using (ITestEngine engine = TestEngineActivator.CreateInstance())
        {
            engine.WorkDirectory = Path.GetDirectoryName(dllPath);
            using (NUnit.Engine.ITestRunner runner = engine.GetRunner(package))
            {
                var filter = new TestFilter("<filter><tests><test>UnitTestProject2.UnitTest1.TestMethod1</test></tests></filter>");
                var result = runner.Run(new TestEventDispatcher(), filter);
                runner.Unload();
                return CreateResult(result);
            }
        }
var package=newtestpackage(“path/to/dll”);
package.AddSetting(“WorkDirectory”,Path.GetDirectoryName(“Path/to/dll”);
使用(ITestEngine引擎=testingineactivator.CreateInstance())
{
engine.WorkDirectory=Path.GetDirectoryName(dllPath);
使用(NUnit.Engine.ITestRunner runner=Engine.GetRunner(包))
{
var filter=newtestfilter(“UnitTestProject2.UnitTest1.TestMethod1”);
var result=runner.Run(新TestEventDispatcher(),过滤器);
runner.Unload();
返回CreateResult(结果);
}
}
如果我尝试运行此代码并检查得到的结果:

        <command-line><![CDATA[".." ]]></command-line><filter><tests><test>UnitTestProject2.UnitTest1.TestMethod1</test></tests></filter><test-suite type="Assembly" id="0" name="UnitTestProject2.dll" fullname="...dll" runstate="NotRunnable" testcasecount="1" result="Failed" label="Error" start-time="2018-02-20 20:31:57Z" end-time="2018-02-20 20:31:57Z" duration="0.001" total="1" passed="0" failed="1" inconclusive="0" skipped="0" asserts="0"><failure><message><

        ![CDATA[The NUnit 3 driver encountered an error while executing reflected code.]]></message><stack-trace><![CDATA[

     Server stack trace: 
        vid NUnit.Engine.Drivers.NUnit3FrameworkDriver.CreateObject(String typeName, Object[] args)
        vid NUnit.Engine.Drivers.NUnit3FrameworkDriver.Run(ITestEventListener listener, String filter)
        vid NUnit.Engine.Runners.DirectTestRunner.RunTests(ITestEventListener listener, TestFilter filter)
        vid System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage(IntPtr md, Object[] args, Object server, Object[]& outArgs)
        vid System.Runtime.Remoting.Messaging.StackBuilderSink.SyncProcessMessage(IMessage msg)

        Exception rethrown at [0]: 
        vid System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
        vid System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
        vid NUnit.Engine.ITestEngineRunner.Run(ITestEventListener listener, TestFilter filter)
        vid NUnit.Engine.Runners.ProcessRunner.RunTests(ITestEventListener listener, TestFilter filter)]]></stack-trace></failure></test-suite>
UnitTestProject2.UnitTest1.TestMethod1<
![CDATA[NUnit 3驱动程序在执行反射代码时遇到错误。]]>

我错过了什么明显的东西吗?我仔细阅读了这里的文档,听起来这应该是正确的方法:

使用没有
节点的过滤器,即:

<filter><test>UnitTestProject.Class1.Test123</test></filter>
两种解决方案都通过了测试:
total=“1”passed=“1”



您可以在以下位置查看解决方案的源代码:。

您使用的是NUnit的哪个版本?NUnit 3.9和NUnit engine 3.8此外,如果您有多个测试,请将它们嵌套在
元素中。文件错了!我会修好的。那太好了!我也很喜欢TestFilterBuilder,谢谢你的提示。我很高兴能帮上忙:)
<filter><or><test>NUnitTestRunner.Class1.Test123</test><test>NUnitTestRunner.Class1.Test456</test></or></filter>
using (ITestEngine engine = TestEngineActivator.CreateInstance())
{
    var filterService = engine.Services.GetService<ITestFilterService>();
    var builder = filterService.GetTestFilterBuilder();
    builder.AddTest("UnitTestProject.Class1.Test123");
    var filter = builder.GetFilter();

    using (ITestRunner runner = engine.GetRunner(package))
    {
        var result = runner.Run(listener: null, filter: filter);
    }
}