【发布时间】:2013-11-01 09:59:06
【问题描述】:
我们有一个单元测试项目,它在许多测试中仍在使用“旧式”私有访问器。 由于它们是维护的噩梦,我们正试图摆脱它们,并迁移到新的 Microsoft Fakes 框架,并在需要时使用 Shims。
最近我们编写了一些使用 Shims 的新单元测试,并注意到由于某种原因,这会导致一些未修改的其他旧测试运行得相当慢。较慢是指受影响测试的运行时间约为 10 秒,而不是 900 毫秒。 不过,自行运行受影响的测试似乎没有这种效果 - 它仅在使用 Shims 进行测试后运行它们时才会发生。
最初我们认为这可能只是由于初始化问题,导致测试相互影响。 然而,经过一些实验,我们发现即使没有实际添加任何新的测试代码,也会出现减速。简单地在其中一个减慢的测试之前添加以下 sn-p 会导致测试运行速度变慢的相同效果:
using (ShimsContext.Create()) {}
调试似乎表明正在测试的代码确实运行得慢得多(不是单元测试代码本身),但我们无法确定它的哪一部分。我们无法确定为什么这些测试会受到影响,而其他测试则不会。 此时我们尝试分析这些测试(使用 VisualStudio 中新的“分析测试”选项)。然而,事实证明,由于某种原因,无法使用 Shims 进行分析测试。抛出以下异常:
Microsoft.QualityTools.Testing.Fakes.UnitTestIsolation.UnitTestIsolationException:UnitTestIsolation 检测未能初始化。请重新启动 Visual Studio 并重新运行此测试
作为最后的手段,我们还尝试将所有使用 Shims 的测试转移到同一解决方案中的单独测试项目中。这似乎确实有所帮助,并且所有测试运行时间都恢复了正常。我们使用测试播放列表在其他项目之前运行每个项目的测试,并且在这两种情况下运行时间都还可以。但这并不是真正的解决方案,感觉更像是在规避实际问题。 所以,我们不确定如何进行。任何想法和想法都会有所帮助。
谢谢。
【问题讨论】:
-
您是否正在使用 VS Test Runner 运行这些测试?还可以尝试删除您的测试项目并再次重新添加所有测试。包括旧的测试以及新的 Shims 单元测试。
-
是的,我们正在使用 VS 测试运行器。您的建议似乎没有帮助...
-
问题很可能与垫片的性质有关。创建 ShimsContext 时,您是在告诉代码您计划重定向方法,这可能表现为检查每个生成了 shim 的方法调用,以查看是否已分配任何重定向。
标签: c# .net performance unit-testing microsoft-fakes