我的项目有 1000 多个单元测试,在本地机器上,所有测试都在不到 10 秒的时间内完成。但是,当它们在 TFS Build 上运行时,某些测试的运行速度明显低于其他测试。其中 3 个在大约 1-2 分钟内运行,其他 4 个在 5-30 秒内运行,而其他则在几分之一秒内运行。我注意到所有那些较慢的测试都使用来自 Microsoft Fakes 的假货,并且每个测试都是同类中第一个运行的。但是很多其他测试也使用假货(有些更密集)并定期运行。我想知道是什么导致了这种放缓,我该如何解决。
编辑:我注意到每个较慢的测试都在无模拟测试之后运行。也许这种减速是由 ShimsContext 的初始化引起的。在我的测试类中,ShimsContext 是在 TestInitialize 和 TestCleanup 方法上创建和处理的。这对性能有显着影响吗?
最佳答案
首先,我强烈建议您远离垫片。它们是拐杖,除了极少数情况外,根本不需要。为可测试性设计代码,您会发现没有它们也可以。
其次,垫片不是线程安全的,不能安全地并发使用。这可能就是您看到运行时间非常慢的原因。
要么你的本地在不应该的时候并发运行(MS 说它不安全,但没有强制执行),而构建服务器不是。
或者构建服务器试图并行并且它导致了问题。
调整您的并发设置以禁用它,看看这对您的运行时有什么影响。
关于c# - Visual Studio 单元测试在 TFS 构建上运行速度较慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30084049/