c# - 如何在大型 c# 项目中进行 TDD 时处理缓慢的单元测试
问题描述
使用 Visual Studio 2017 NUnit 和 resharper 测试运行器,在大型 c# 项目(5000+)测试中进行 TDD 时如何保持良好的单元测试速度。即使这些测试中的每一个只需要 5 毫秒,也就是 25 秒,这对于一个 TDD 周期来说是相当慢的。
我们的测试不调用数据库,也不调用外部 Web 服务。他们只测试业务逻辑。
我发现使用最小起订量,单独执行 Mock.Setup() 几乎需要 1 毫秒。由于每个测试我们可能有一些最小起订量设置调用,这是我们缓慢的单元测试的主要罪魁祸首。
有什么办法可以加快单元测试的速度吗?有没有比 moq 更快的模拟库?或者也许是另一个更快的测试运行器?
解决方案
你走错了兔子整体:所有单元测试的整体运行时间仍然在一个非常合理的范围内!
在进行开发(可能使用 TDD)时,您并不关心所有单元测试。您只关心与当前组件/包/...相关的那些!
如:当您在 file 中进行更改时A
,您可能希望(手动)运行所在目录的所有单元测试A
。您进行另一个小的更改,再次运行这些测试。
然后,稍后,当您认为:“我现在完成了”时,您调用所有单元测试,以确保您没有通过重新布置此处房间的家具来破坏建筑物另一端的某些东西。
所以,答案是:你很好,别担心。
我们有 5000 多个 Java 单元测试。在我们最快的构建服务器上,大约需要 10 分钟才能完成所有工作。但这仍然可以。后端构建在 20 分钟后仍然返回并告诉我们“损坏”或“一切正常”。为什么?因为只有当我决定我的更改集完成时,构建服务器才会启动,并将它推送到服务器。
当这 25 秒成为问题时,因为您过于频繁地运行所有测试,因为您手动触发它们。现在:宁愿花你的精力寻找聪明的方法,只在以有效的方式处理特定问题时运行相关测试。(在带有 JUnit 的 Java 中,这很简单:我单击当前包,然后转到“在此处运行所有测试)
推荐阅读
- ruby - 无法到达 binding.pry
- reactjs - React 路由器仅在刷新时显示组件
- angular - Ionic 4/ 5 - 当我再次访问同一个屏幕时删除缓存数据
- sql - 没有在 SQL 上的过程上打印
- html - 为什么此图像和 div 未对齐
- javascript - 尝试在我的项目中使用 Axios 时出现很多不同的错误
- python - 每当我的计时器对象被重置时,Tkinter after() 变得更快
- angular - 从 Angular 服务调用 AppSync 查询:如何将结果转换为 observable?
- python-3.x - 如何修复 macOS 中 Python2/3 的 ssl 错误
- mysql - MYSQL 5.7 如何查询JSON字段是否包含至少一个属性大于值的对象?