如何从C#代码运行NUnit测试

Dro*_*per 18 .net c# nunit

我正在尝试编写一个接收文件并使用NUnit运行它的简单方法.我使用NUnit的源代码构建的代码不起作用:

if(openFileDialog1.ShowDialog() != DialogResult.OK)
{
    return;
}

var builder = new TestSuiteBuilder();
var testPackage = new TestPackage(openFileDialog1.FileName);
var directoryName = Path.GetDirectoryName(openFileDialog1.FileName);
testPackage.BasePath = directoryName;
var suite = builder.Build(testPackage);

TestResult result = suite.Run(new NullListener(), TestFilter.Empty);
Run Code Online (Sandbox Code Playgroud)

问题是我不断得到builder.Build抛出的异常,说明找不到程序集.

我错过了什么?是否有其他方法从代码运行测试(不使用Process.Start)?

Mar*_*erl 28

在开头添加以下行,设置NUnit框架并可能对您有所帮助:

CoreExtensions.Host.InitializeService();
Run Code Online (Sandbox Code Playgroud)

以编程方式执行NUnit测试的另一种"更简单"的方法是:

TestPackage testPackage = new TestPackage(@"C:\YourProject.Tests.dll");
RemoteTestRunner remoteTestRunner = new RemoteTestRunner();
remoteTestRunner.Load(testPackage);
TestResult testResult = remoteTestRunner.Run(new NullListener());
Run Code Online (Sandbox Code Playgroud)

您需要引用以下程序集:

  • nunit.core.dll
  • nunit.core.interfaces.dll

当然,nunit.framework.dll必须在您的测试程序集的文件夹中;)

  • 这些东西有记录吗?我想自己实现这样的东西,但我宁愿 RTFM 看看有哪些选项对我开放 (2认同)
  • 我没有找到任何文档,不得不围绕[源代码](https://github.com/nunit/nunitv2)来获取更多信息.可是 - 当我在那里 - 我发现RemoteTestRunner`和`SimpleTestRunner`之间`一个微妙的差异 - 前者已经调用`CoreExtensions.Host.InitializeService`你,而简单的亚军没有(因此需要你的用户将其添加到你的代码). (2认同)