我正在尝试使用控制台程序执行用c#编写的N个单元测试用例。到目前为止,我尝试了不同的方法,但无法找到一种完美的方法来实现同样的目标。
方法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 });这会抛出一个错误,说“程序集不包含任何测试,或者没有找到合适的测试驱动程序”
有没有人可以告诉我如何使用执行日志运行测试?
发布于 2016-05-24 21:18:07
这不是NUnit的工作方式。
在第一个示例中,您使用的是NUnit 2.x的内部类和方法,这些类和方法没有用于一般用途的文档。它们恰好被声明为public,因为这是我们过去对我们自己的测试调用的所有方法的标准实践。此外,使用NUnit测试适配器也没有任何意义,因为该包用于将NUnit连接到Visual Studio测试窗口。我怀疑它在为您工作,因为它引入了nunit.core程序集,而这正是您实际使用的。
在第二个示例中,直接调用main。你已经发布了一个关于这个不工作的nunit问题,所以我不会详细讨论了。我只想说,通过引用并调用它的main来运行一个独立的程序只在最简单的情况下有效。对于像console runner这样动态加载各种程序集的程序来说,它不一定能正常工作。
API3提供了一个用于运行测试的已发布NUnit。这是人们多年来一直要求我们做的事情。它终于出现了!为什么不使用它呢?查看nunit 3文档中关于测试引擎及其API的信息。如果您出于某种原因想要以编程方式运行测试,这就是目前的做法。
当然,你可以继续尝试你已经采取的方法,我会在需要的时候继续评论。我只想让那些在未来发现这篇文章的人明白,这不是NUnit的设计使用方式。
https://stackoverflow.com/questions/37411187
复制相似问题