3

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

4

3 回答 3

1

我可以建议一种稍微不同的方法,但与@UvarajGopu 的思路相同......

只要您使用高于“Express”版本的 Visual Studio,并且如果您在单独的项目中编写 UnitTest(通常与正在测试的项目一起,带有“.UnitTests”后缀),那么请执行以下操作:

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

现在您可以简单地按 F5(开始调试)来构建您的项目,然后为您启动 NUnit GUI。这还有一个额外的好处,如果您的测试失败,您可以添加断点,并逐步使用调试器(无需手动附加调试器)。

于 2015-08-06T14:51:20.737 回答
0

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

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

于 2014-04-24T13:29:19.113 回答
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 被很好地释放,你可以随心所欲地使用它。

于 2015-01-22T11:41:18.150 回答