NUnit没有为我的单元测试项目发布.dll

时间:2013-09-06 22:39:00

标签: c# unit-testing nunit

我有NUnit GUI运行器,每次构建时都会在我的单元测试程序集上运行测试。问题是,当我尝试构建时,NUnit正在使用Debug文件夹中的.dll,这阻止了它的构建,这阻止了自动测试运行。有办法解决这个问题吗?

3 个答案:

答案 0 :(得分:0)

每当您构建解决方案时。我建议你关闭装有你的.dll的Nunit。卸载后尝试构建,然后您的构建将成功。

由于Nunit正在使用你.dll。它不会让你的构建成功。

答案 1 :(得分:0)

前一段时间我遇到过类似的问题,我的最终解决方案是从使用NUnit GUI运行器辞职,直接从代码中运行它们。

在我的项目中,我引用了那些新构建的dll以及nunit.core和nunit.utils所需的NUnit库。代码本身非常简单:

TestResult ExecuteTests(string testAssemblyPath) {
    CoreExtensions.Host.InitializeService();
    TestPackage testPackage = new TestPackage(testAssemblyPath);
    testPackage.BasePath = Path.GetDirectoryName(testAssemblyPath);

    RemoteTestRunner testRunner = new RemoteTestRunner();
    testRunner.Load(testPackage);

    TestResult testResult = testRunner.Run(new NullListener(), TestFilter.Empty, true, LoggingThreshold.Warn);

    testRunner.Unload();
    CoreExtensions.Host.UnloadService();

    return testResult;
}

TestResult对象非常强大。除其他外,它包含所有结果,子结果,测试本身等。为了分析它们,您可以创建一个简单的解析器或使用NUnit库给出的一种可能性。我最喜欢的是XmlResultWriter,但也有其他人可用。所有这些都可以在nunit.util.dll中找到。

不幸的是,这仍然会阻止加载的dll被重建。我通过在单独的AppDomain中运行它并在测试完成运行后卸载此域来避免此问题。然后dll很好地释放,你可以随心所欲地使用它。

答案 2 :(得分:0)

我可以建议一种略有不同的方法,但与@UvarajGopu ....

一样

只要您使用的Visual Studio高于" Express"如果你将UnitTests写在一个单独的项目中(通常与正在测试的项目一起使用" .UnitTests"后缀),那么执行以下操作:

  • 将您的UnitTests项目设置为StartUp项目(右键单击解决方案资源管理器,"设置为启动项目")
  • 在该项目的项目属性中,在" Debug"选项卡,选择"启动外部程序",然后选择NUnit GUI可执行文件。将UnitTests程序集的名称放在"命令行参数"。

现在您只需按F5(开始调试)即可构建您的项目,并为您启动NUnit GUI。这具有额外的优势,如果您的测试失败,您可以添加断点,并逐步使用调试器(无需手动附加调试器)。