Answers:
是。诸如Microsoft Moles,TypeMock Isolator和JustMock之类的一些框架使您能够模拟几乎任何东西。对于希望在现有遗留代码上使用它们的开发人员而言,这些模拟工具通常更好,因为可能无法将其重构为可测试性更高的设计。*
传统上,可测试的设计意味着代码库需要自由使用接口,抽象类,虚拟方法,未密封的类等。因此,传统的模拟框架(如Moq和RhinoMocks)与使用测试驱动开发,依赖注入和其他这样的概念。顺便说一句,我强烈建议您使用Dependency Injection,因为您获得的不仅仅是可测试的代码,而且还有更多的可维护代码。
*有关如何在不进行测试的情况下缓慢重构代码的方法,请参见《使用遗留代码有效工作》,以了解可与传统测试(和模拟)工具一起使用的代码。
该起订量教程具有在此讨论了这个相对于一些特定的工具开始的背景,理念,争议权的部分:TypeMock隔离,RhinoMocks和起订量。它是为了解释Moq而写的,所以自然有点歪斜,但是当我尝试理解模拟框架中的某些差异时,我发现它对我很有帮助。
我在C#模拟框架上找到对此SO线程的响应也很有用。大多数只是指用户真正发现有用的一个Mocking框架,但是HaraldV的回应是讨论基于代理的模拟和基于探查器的模拟的方法。
我还能够在线找到比较表。请注意,它是从2009年开始的,因此我不确定它是否是最新的。至少有一条评论指出TypeMock和回调的信息已过时,但是即使您需要做一些工作来了解当前状态,该图表也可能有助于提出要考虑的问题: RhinoMocks,Moq,NMock,和TypeMock比较表
在我的团队中,我们选择了Microsoft Moles。它在#2,#3和#4上大获全胜,尽管它不如大多数替代方法那么习惯,并且在#1上处于低端。