我的项目有1000多个单元测试,在本地机器上,所有测试都在不到10秒的时间内完成。但是当他们在TFS Build上运行时,某些测试的运行速度明显慢于其他测试。其中3个在大约1-2分钟内运行,其他4个在5-30秒内运行,其他的则在几分之一秒内运行。我注意到所有那些较慢的测试都使用来自Microsoft Fakes的假货,而且每一个都是第一个在它的类中运行的。但是很多其他测试也使用假货(一些更密集)并且定期运行。我想知道可能导致这种减速的原因以及如何解决这个问题。
编辑:我注意到,在无模拟测试之后,每个较慢的测试都会运行。也许这种减速是由ShimsContext的初始化引起的。在我的测试类中,ShimsContext是在TestInitialize和TestCleanup方法上创建和处理的。这会对性能产生重大影响吗?
答案 0 :(得分:1)
首先,我强烈建议您远离垫片。它们是拐杖,除了极少数情况外,根本不需要。为可测试性设计您的代码,您会发现没有它们您也能做到。
其次,shim 不是线程安全的,不能安全地并发使用。这可能就是您看到运行时间非常缓慢的原因。
要么你的本地在不应该的时候并发运行(微软说它不安全,但没有强制执行),而构建服务器不是。
或者构建服务器正在尝试并行并且导致问题。
调整您的并发设置以禁用它,看看这对您的运行时有什么影响。
答案 1 :(得分:0)
请参考以下链接: https://softwareengineering.stackexchange.com/questions/184834/how-do-we-make-unit-tests-run-fast
http://arlobelshee.com/the-no-mocks-book/
链接说,快速进行测试可能很难。去耦是关键。嘲笑/伪造还可以,但是可以通过重构使模仿/伪造变得不必要而做得更好。