【问题标题】:Avoid complete solution building after run Unit Tests避免在运行单元测试后构建完整的解决方案
【发布时间】:2015-01-13 09:48:01
【问题描述】:

我正在使用 VS2013 Professional 进行单元测试。特别是我正在使用 NUnit 框架(VS2013 的 NUnit TestAdapter)。我的问题是,当我运行测试时,VS 开始在解决方案中构建所有项目。目前单元测试项目没有引用任何解决方案项目。

如果我简单地编写一个测试方法,例如:

[Test]
public void SimpleTestMethod(){
    Assert.That("a", Is.EqualTo("a"));
}

并且单元测试项目位于具有 N 个项目的解决方案中,当我运行我的测试时,VS 将构建所有 N-1 个项目......在我的情况下,这种行为很无聊,因为它需要太多时间(解决方案包含许多项目)和一些项目包含错误。

有没有办法在没有完整解决方案构建的情况下运行我的SimpleTestMethod()

【问题讨论】:

  • 如果项目引用了许多已更改的项目,它将始终重建。它需要,因为它不知道在构建完成之前是否有任何东西会中断。

标签: c# unit-testing visual-studio-2013 nunit


【解决方案1】:

将您的测试项目拆分为多个仅引用解决方案项目子集的项目。

这也是很好的测试内务管理——每个解决方案项目都有一个单独的单元测试项目,而不是一个依赖于其他任何东西的大型项目。这样做有几个优点:

  • 测试运行得更快
  • 隔离测试用例要容易得多,尤其是配置设置
  • 您可以一起对项目及其测试用例进行版本控制

一个好的命名习惯是使用.Tests 后缀将您的测试项目命名为与其目标项目相同的名称。您还可以创建一个名为“Tests”的解决方案文件夹(不是真正的文件夹)并将测试项目移动到其中。

至于原因:测试运行者使用单元测试程序集及其依赖项来运行他们的测试。如果程序集的任何依赖项发生更改,则必须重新构建程序集和依赖项。 Visual Studio 不知道外部工具会调用什么,因此它必须构建所有已更改的程序集及其依赖项。

如果构建失败,则没有可供测试运行程序使用的有效程序集,因此 VS 必须在运行程序工作之前重新构建整个解决方案。在这种情况下,显而易见的解决方案是修复错误。

在修复错误之前,您可以使用一些权宜之计:

  • 暂时从构建配置中移除损坏的项目
  • 拆分解决方案,以便您拥有可构建和测试的解决方案

【讨论】:

  • 我很确定这是一个很好的提示,但目前我的测试项目没有引用任何其他解决方案项目。我刚刚将测试项目添加到解决方案中,并且我已经编写了 SimpleTestMethod()。
  • @baru 这与你在问题中写的相反(any references to any solution project is referenced to the Unit Test project)。在任何情况下,测试运行器都是针对构建工件(即编译的程序集)的外部工具。损坏的构建=没有构建工件
  • 对不起,你是对的,我错了。现在问题是正确的。
  • 唯一真正的解决方案是修复错误。在您这样做之前,您可以从构建配置中删除损坏的项目,但这只是一种临时措施。拆分解决方案是另一种骇人听闻的选择。
【解决方案2】:

我也为此苦苦挣扎了很长时间。我实际上讨厌自动构建过程,即使一切都成功了。

我开始通过命令行运行测试。不需要构建过程。您可以编写自己的 .bat 文件并保存测试结果日志。有很多命令行参数可以添加来定制你正在寻找的东西。

https://msdn.microsoft.com/en-us/library/jj155796.aspx

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-09
    • 1970-01-01
    • 2011-07-13
    • 1970-01-01
    • 2010-12-11
    相关资源
    最近更新 更多