在其他测试中使用假货时,单元测试会变慢Microsoft

本文关键字:单元测试 Microsoft 测试 其他 | 更新日期: 2023-09-27 18:36:34

我们有一个单元测试项目,它在许多测试中仍然使用"旧式"私有访问器。由于它们是维护的噩梦,我们正试图摆脱它们,并转向新的Microsoft Fakes框架,在需要时使用填充码。

最近我们编写了一些使用填充码的新单元测试,并注意到由于某种原因,这导致一些未修改的其他旧测试运行速度相当慢。我所说的较慢是指受影响测试的运行时间约为 ~10 秒而不是 ~900 毫秒。不过,自行运行受影响的测试似乎没有这种效果 - 它仅在使用填充码测试后运行它们时才会发生。

最初我们认为这可能仅仅是由于初始化问题,导致测试相互影响。但是,经过一些实验,我们发现即使没有实际添加任何新的测试代码,速度也会变慢。只需在其中一个速度变慢的测试之前添加以下代码片段,即可产生测试运行速度变慢的相同效果:

using (ShimsContext.Create()) {} 

调试似乎表明正在测试的代码确实运行得慢得多(不是单元测试代码本身),但我们无法确定它的哪一部分。我们无法确定为什么这些测试会受到影响,而其他测试不会受到影响。此时,我们尝试分析这些测试(使用VisualStudio中新的"配置文件测试"选项)。但是,事实证明,由于某种原因,无法使用填充码进行分析测试。引发了以下异常:

Microsoft.质量工具.测试.假货.单元测试隔离.单元测试隔离异常:单元测试隔离检测初始化失败。请重新启动 Visual Studio 并重新运行此测试

作为最后的手段,我们还尝试将使用填充码的所有测试移动到同一解决方案中的单独测试项目中。这似乎确实有所帮助,所有测试运行时间都恢复正常。我们使用测试播放列表在另一个项目之前运行每个项目的测试,在这两种情况下,运行时间都可以。不过,这并不是一个真正的解决方案,感觉更像是在规避实际问题。因此,我们不确定如何进行。任何想法和想法都会有所帮助。

谢谢。

在其他测试中使用假货时,单元测试会变慢Microsoft

Microsoft文档《使用Microsoft伪造更好的单元测试》(RTM).pdf指出,使用填充码时,您将看到性能下降。

本文还介绍了填充码的性能影响:http://technet.microsoft.com/en-us/windows/jj863250.aspx

"

其他"测试应该在无填充码上下文(ShimsContext.ExecuteWithoutShims)中显式执行,因为看起来即使在其他测试中释放的ShimsContext也可能绕道不使用填充码的逻辑。