c# - Visual Studio 单元测试在 TFS 构建上运行速度较慢

标签 c# unit-testing visual-studio-2013 tfs microsoft-fakes

我的项目有 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/

相关文章:

c# - 如何将二维数组中的一行值复制到一维数组中?

c# - 在 GridView 中对 DropDownList 选定值使用 Eval

使用 @Autowired 注释进行 Spring JUnit 测试

java - 我无法在不暴露私有(private)字段的情况下对我的类进行单元测试——我的设计有问题吗?

c# - 检索 XML 文档并同时解析 HTTP header (C#)

c# - 用于移动的 Unity C# 脚本不起作用

unit-testing - 安排 Jmeter 分布式测试

visual-studio-2013 - Visual Basic 2013 在 Release 中加载程序集引用,但在 Debug 中不加载

c# - 当前上下文中不存在名称 'Thread'

c++ - 在 Visual Studio 2013 下为/MD 版本重建 Crypto++ 5.6.2