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

21

我试图编写一个简单的方法,接收一个文件并使用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);

问题在于我不断收到由builder.Build抛出的异常,指示找不到程序集。

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


说实话,我不知道这种测试方法。瞎猜一下,你是否尝试通过NUnit GUI运行此测试,或者验证您是否已将所有依赖项引用到您的项目中,或者检查程序集是否位于异常所述找不到它的位置?使用NUnit的测试类必须具有[TestFixture()]属性,测试方法必须具有[Test()]属性,并使用NUnit.Framework导入。 - Will Marcouiller
1个回答

30

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

CoreExtensions.Host.InitializeService();

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

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

您需要引用以下程序集:

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

当然,nunit.framework.dll 必须与您的测试程序集位于同一文件夹中 ;)


2
这些东西有文档吗?我想自己实现类似的东西,但我宁愿先看看手册以了解我的选项。 - Andy
2
我没有找到任何文档,不得不在源代码(https://github.com/nunit/nunitv2)中查找更多信息。但是当我在那里时,我发现了“RemoteTestRunner”和“SimpleTestRunner”之间的微小区别,前者为您调用“CoreExtensions.Host.InitializeService”,而简单运行程序则不会(因此需要您作为用户将其添加到您的代码中)。 - SethO
我让它运行了,但是我无法在任何地方看到结果。有什么建议吗?先谢谢了。 - hamaney

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