单元测试遗留代码:限制"提取和覆盖" vs JustMock / TypeMock / moles?

时间:2011-08-17 17:12:37

标签: c# unit-testing moles typemock justmock

考虑到以下条件:

  • 一个非常古老,庞大的C#遗留代码库,没有任何testcoverage
  • (几乎)每个类都来自某个接口
  • 没有密封

与使用extract& override +相比,使用ProfileM-API驱动的解决方案(如JustMock和TypeMock)有什么实际好处? RhinoMocks?有没有我不知道的情况,除了绕过私人/受保护,使用TypeMock / JustMock等真的需要?我特别欢迎一些人转换到其中一个产品的经验。

使用extract& override似乎解决了处理旧遗留代码时的所有问题,重构似乎很简单,并且引入错误的可能性似乎很小。利益是否减少了测试代码?更多美丽的课程,虚拟保护的东西更少?现在,我并不“理解”,虽然我知道首先单独测试私有方法非常有帮助,因为在这些旧的遗留代码库中,公共方法可能过于庞大。

如果您不知道摘录和覆盖是什么:请参阅here

1 个答案:

答案 0 :(得分:2)

框架之间存在许多差异,这些差异不考虑框架所依赖的技术。

例如:

  • API - 每个框架都有不同的符号和默认值(例如 严格的默认值与宽松的默认值)
  • 支持 - 适当框架通常提供许可证支持
  • 价格 - 这不是使用问题,但需要预算

Extract& Override的主要优点是它需要进行一些重构,如果你正在处理的代码被忽略,那么它就很有可能重复它并将其重构为更好的代码,而不仅仅是为了测试性。 / p>

使用隔离框架的主要优点是您不需要更改测试中的代码(如果它是一个大型代码库,可能需要很长时间才能重构它以实现可测试性)。此外,隔离框架不会强迫您进入特定设计,如果遗留代码与现有设计更好地匹配,这可能会有所帮助。在遗留代码中有用的另一个特性是交换在被测代码中创建的实例,通常重构实例化需要花费更多精力并且可以保存。最后一件事是伪造第三方代码 - 使用隔离框架,您可以在不使用包装类的情况下隔离不属于您的代码。

免责声明 - 我在Typemock工作