C# 避免在运行单元测试后构建完整的解决方案

C# 避免在运行单元测试后构建完整的解决方案,c#,unit-testing,visual-studio-2013,nunit,C#,Unit Testing,Visual Studio 2013,Nunit,我正在使用VS2013 Professional进行单元测试。特别是我使用的是NUnit框架(适用于VS2013的NUnit TestAdapter)。我的问题是,当我运行测试时,VS开始在解决方案中构建所有项目。目前,单元测试项目没有引用任何解决方案项目 如果我只编写一个测试方法,如: [Test] public void SimpleTestMethod(){ Assert.That("a", Is.EqualTo("a")); } 单元测试项目是在一个有N个项目的解决方案中,当我

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

如果我只编写一个测试方法,如:

[Test]
public void SimpleTestMethod(){
    Assert.That("a", Is.EqualTo("a"));
}
单元测试项目是在一个有N个项目的解决方案中,当我运行测试时,VS将构建所有的N-1项目。。。在我的例子中,这种行为很无聊,因为它花费了太多的时间(解决方案包含许多项目)并且有些项目包含错误


有没有一种方法可以在不完整构建解决方案的情况下运行my
SimpleTestMethod()

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

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

  • 测试运行得更快
  • 隔离测试用例要容易得多,尤其是配置设置
  • 您可以将项目及其测试用例一起进行版本设置
一个好的命名实践是使用
.Tests
后缀将测试项目命名为与其目标项目相同的名称。您还可以创建一个名为“Tests”的解决方案文件夹(不是真正的文件夹),并在其中移动测试项目

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

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

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

  • 从生成配置中临时删除损坏的项目
  • 拆分解决方案,以便您有一个可以构建和测试的解决方案

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

      我开始通过命令行运行测试。不需要构建过程。您可以编写自己的.bat文件并保存测试结果日志。有很多命令行参数可以添加,以自定义您要查找的内容


      我很确定这是一个很好的提示,但目前我的测试项目没有引用任何其他解决方案项目。我刚刚将测试项目添加到解决方案中,并编写了SimpleTestMethod()。@baru,这与您在问题中所写的相反(
      对任何解决方案项目的任何引用都是对单元测试项目的引用)。在任何情况下,测试运行程序都是针对构建工件(即编译的程序集)的外部工具。你是对的,我错了。现在问题是正确的。唯一真正的解决办法是修正错误。在此之前,您可以从构建配置中删除损坏的项目,但这只是一个临时措施。拆分解决方案是另一个黑客的选择。如果项目引用了许多已更改的项目,它将始终重建这些项目。它需要这样做,因为在构建完成之前,它不知道是否有任何东西会被破坏。