c# - 在大型 c# 项目中进行 TDD 时如何处理缓慢的单元测试

标签 c# visual-studio unit-testing tdd resharper

使用 visual studio 2017 NUnit 和 resharper 测试运行器,在大型 c# 项目(5000+)测试中进行 TDD 时如何保持良好的单元测试速度。即使这些测试中的每一个只需要 5 毫秒,也就是 25 秒,这对于 TDD 周期来说是相当慢的。

我们的测试不调用数据库,也不调用外部网络服务。他们只测试业务逻辑。

我发现使用最小起订量,单独执行 Mock.Setup() 需要将近 1 毫秒。由于每个测试我们可能有一些最小起订量设置调用,这是我们缓慢的单元测试的主要原因。

有什么办法可以加快单元测试速度吗?有没有比最小起订量更快的模拟库?或者可能是另一个更快的测试运行器?

最佳答案

你走错了路:你所有单元测试的总体运行时间仍然在一个非常合理的范围内!

在进行开发(可能使用 TDD)时,您不关心所有 单元测试。您只关心与当前组件/包/...相关的那些!

如:当您在文件 A 中进行更改时,您可能希望(手动)为目录 A 所在的目录运行所有单元测试。您创建另一个小改动,您再次运行这些测试。

然后,稍后,当您认为:“我现在已经完成了”时,然后您调用所有单元测试,以确保您没有破坏建筑物另一端的东西在这边的那个房间里重新布置家具。

所以,答案是:你很好,别担心。

我们有 5000 多个 Java 单元测试。在我们最快的构建服务器上,完成所有这些操作可能需要大约 10 分钟。但这仍然可以。后端构建在 20 分钟后仍然返回并告诉我们“损坏”或“一切正常”。为什么?因为构建服务器只有在我确定我的更改集已完成时才会启动,并且我将其推送到服务器。

当这 25 秒成为问题时,因为您运行所有 测试过于频繁,因为您手动触发了它们。现在:宁愿花精力想办法在以有效的方式处理特定问题时只运行相关测试。 (在带有 JUnit 的 Java 中,这很简单:我单击当前包,然后转到“在此处运行所有测试”)

关于c# - 在大型 c# 项目中进行 TDD 时如何处理缓慢的单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53619346/

相关文章:

c# - 集合项中使用的 BackgroundWorker

c# - 在 C# 中,通过 this.XYZ 访问当前对象的属性与仅 XYZ 相比被认为是糟糕的风格

c# - UWP 应用 : Process Memory Usage vs Heap Usage

visual-studio - 如何使用本地文件夹中的 nuget 符号包进行调试?

c# - 逐步应用更好的设计

C# Access OleDb 标准表达式中的数据类型不匹配

c# - 根据选定的网格行项目检索隐藏对象属性 C#

java - 如何将 HTTP 测试集成到我的 CI 中

unit-testing - 如何在Spring集成中进行单元测试?

unit-testing - 自动软件测试