单元测试遗留代码:"extract and override"与 JustMock/TypeMock/moles 的限制?



给定以下条件:

  • 一个非常旧的,大的c#遗留代码库,没有任何测试覆盖
  • (几乎)每个类都派生自某个接口
  • 没有东西是密封的

与使用extract&override +(例如RhinoMocks)相比,使用像JustMock和TypeMock这样的分析器api驱动的解决方案的实际好处是什么?是否有我不知道的情况下,除了规避私人/保护,使用TypeMock/JustMock等是真的需要?我特别欢迎那些使用过我们产品的人提供一些经验。

在处理旧的遗留代码时,使用extract&override似乎解决了所有问题,重构似乎非常简单,引入bug的可能性似乎非常小。编写更少的测试代码是否有好处?更漂亮的类与更少的虚拟保护的东西?现在,我不明白,虽然我明白首先孤立地测试私有方法是非常有用的,因为在这样的旧遗留代码库中,公共方法可能太大了。

如果你不知道extract&override是什么,请看这里

框架之间有许多不同之处,这些不同之处并不考虑框架所基于的技术。

例如:

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

Extract&Override的主要优点是它需要一些重构,如果你正在处理的代码被忽略了,它给了你一个很好的机会来检查它并重构它,以获得更好的代码,而不仅仅是为了可测试性。

使用隔离框架的主要优点是您不需要更改被测代码(如果它是一个大型代码库,则可能需要很长时间来重构它以达到可测试性)。此外,隔离框架不会强迫您进行特定的设计,如果遗留代码与现有设计更匹配,这可能会很有帮助。在遗留代码中另一个有用的特性是交换在测试代码中创建的实例,通常重构实例需要更多的努力,这可以节省。最后一件事是伪造第三方代码——使用隔离框架,你可以隔离不属于你的代码,而不使用包装类。

免责声明-我在Typemock工作

最新更新