我正在尝试使用控制台程序执行在c#中编写的Nunit测试用例。到目前为止,我尝试了不同的方法,但没有找到一种完美的方法来实现同样的目标。
方法1:使用NUnitTestAdapter包。此程序包较旧,无法运行使用最新的nunit版本3.2.1创建的测试。但它与旧版本如2.6.4
一起工作正常在解决方案中添加了NUnitTestAdapter包然后尝试了下面的代码
CoreExtensions.Host.InitializeService();
TestSuiteBuilder builder = new TestSuiteBuilder();
TestPackage testPackage = new TestPackage(@"path to dll");
RemoteTestRunner remoteTestRunner = new RemoteTestRunner();
remoteTestRunner.Load(testPackage);
TestSuite suite = builder.Build(testPackage);
TestSuite test = suite.Tests[0] as TestSuite;
var numberOfTests = ((TestFixture)test.Tests[0]).TestCount;
int i = 0;
foreach (TestMethod t in ((TestFixture)test.Tests[0]).Tests)
{
Console.WriteLine(t.TestName.Name);
//TestName testName = ((TestMethod)((TestFixture)test.Tests[0]).Tests[i]).TestName;
TestFilter filter = new NameFilter(t.TestName);
TestResult result = test.Run(new NullListener(), filter);
ResultSummarizer summ = new ResultSummarizer(result);
NUnit.Core.NUnitFramework.Assert.AreEqual(1, summ.ResultCount);
i++;
}
我可以获得任何更新版本,这将是一个很好的解决方案。
方法2:使用Nunit3-console
在我的项目中添加了对nunit3.console.exe的引用,并尝试使用以下代码
string path = @"path to dll";
NUnit.ConsoleRunner.Program.Main(new[] { path });
这是一个错误说"任何一个程序集都没有包含测试或没有找到合适的测试驱动程序"
有人可以告诉我们如何使用执行日志运行测试?
答案 0 :(得分:1)
这不是NUnit的工作方式。
在第一个示例中,您使用的是NUnit 2.x的内部类和方法,这些类和方法没有记录以供一般使用。它们碰巧被宣布为公开,因为这是我们过去对我们自己的测试所调用的所有方法的标准做法。此外,您使用NUnit测试适配器毫无意义,因为该包用于将NUnit连接到Visual Studio测试窗口。我怀疑它对你有用,因为它引入了nunit.core程序集,这就是你实际使用的程序。
在第二个示例中,您直接调用main。你已经发布了关于这个无效的nunit问题,所以我不打算详细介绍。我只是说通过引用它来运行一个独立程序并调用它只能在最简单的情况下工作。对于像控制台运行程序这样的程序,它可以动态加载各种程序集,但它不一定有效。
NUnit 3提供了一个用于运行测试的已发布API。这是人们多年来要求我们做的事情。终于到了!为什么不用它?查看nunit 3文档,了解有关测试引擎及其API的信息。如果你想出于某种原因以编程方式运行测试,这就是现在的发展方向。
当然,您可以继续尝试使您采用的方法发挥作用,并且我会根据需要继续发表评论。我只想清楚地告诉那些将来发现这篇文章的人们,这不是NUnit的设计方式。