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

标签 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 个项目的解决方案中,当我运行我的测试时,VS 将构建所有 N-1 个项目......在我的例子中,这种行为很无聊,因为它花费了太多时间(解决方案包含许多项目)和一些项目包含错误。

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

最佳答案

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

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

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

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

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

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

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

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

关于c# - 避免在运行单元测试后构建完整的解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27919168/

相关文章:

c# - 不断的虐待?

c# - 在 NUnit 测试中使用 WPF 组件 - 如何使用 STA?

c# - 如何在一个解决方案中添加多个 namespace 和类

c# - MS 图表数据值标签

c# - 单元测试 : Add Record to Database

.net - XmlDocument 上的 SelectNodes 是否可能返回 null?

configuration - 在 Visual Studio Markdown 预览中更改默认字体样式

git - 如何使用 Git 和 Nunit 在 Visual Studio Online 中设置持续集成

c - 在 C 中使用指针和数组

c# - EF Core 属性值转换在派生实体配置中不起作用