如何测量模拟框架 (TypeMock) 的开销?
Posted
技术标签:
【中文标题】如何测量模拟框架 (TypeMock) 的开销?【英文标题】:How can I measure the overhead of a mocking framework (TypeMock)? 【发布时间】:2009-07-30 09:44:32 【问题描述】:我刚刚开始为我的团队评估模拟框架,我想知道是否有人可以提供任何关于参考文档或经验的指针,您可以分享在进行性能测试时模拟的成本。
链接?个人经验?细节赞赏。
【问题讨论】:
【参考方案1】:IIRC TypeMock 使用 Profiler API,这通常会增加相当多的开销,但仍应该比通过分析器运行应用程序更快。
NCover 也使用 Profiler API,而且速度似乎相当快。
【讨论】:
【参考方案2】:Aaron Jensen 创建了一个测试项目并进行了一些性能测试。 http://codebetter.com/blogs/aaron.jensen/archive/2008/05/08/mock-framework-benchmarks.aspx
虽然我更愿意根据 API 和功能进行选择,但性能可能是 TDD 和运行测试负载的问题。
【讨论】:
【参考方案3】:我们已经使用 TypeMock 几年了,根据我的经验,性能上没有显着的开销(我确信有开销,这不是一个大问题)。
但是,由于 TypeMock 工作方式的性质,有几件事情需要考虑。由于 TypeMock 基本上是通过动态注入代码来工作的,因此错误有时可能非常奇特。因此,报告错误可能成为一项艰巨的任务。准备好深入了解 IL。
我的经验是,“普通开发人员”很难解释 TypeMock 的工作原理。它很快变得复杂,即使他们的 Trace 工具使故障排除变得可行,它仍然留下了一些支持任务。
此外,由于 TypeMock 可以让您模拟任何内容(mscorlib 除外),因此您实际上不需要在代码中添加必要的间接级别。这是一个功能,TypeMock 在这里并没有真正的错。尽管如此,我还是看到很多开发人员试图通过到处模拟而不是解耦代码来解决他们的问题。这并不能提高 IMO 的整体代码质量。
【讨论】:
TypeMock 允许你模拟 DateTime.Now 和 StreamReader.ReadToEnd (我认为它是从 5.3.1 开始的)【参考方案4】:我一直在测试模拟框架(特别是 Moq 和 TypeMock)。 TypeMock 更加强大和灵活,但是因为它作为分析器插入到框架中,它确实对性能产生了重大影响。
我的结论是,TypeMock 是用于非负载测试场景的出色工具。起订量不太灵活……但重量更轻,对一般性能没有广泛影响。使用 Moq,您必须专门设置您的应用程序,以便能够模拟外部依赖项(无论如何都是良好设计中的练习),但事实证明它更适合我的负载相关场景。
很遗憾,我没有在测试中记录有关 Moq 与 TypeMock 的实际数字,但根据我的经验,Moq 的性能优势非常显着。
【讨论】:
以上是关于如何测量模拟框架 (TypeMock) 的开销?的主要内容,如果未能解决你的问题,请参考以下文章
TypeMock Isolator:WillThrow() 跨越单元测试边界?
Anylogic - 如何在模拟中测量在制品库存 (WIP)
在 Visual Studio 负载测试中使用 TypeMock Isolator.Swap.AllInstances<T>?