C#的非接口依赖模拟框架

Chr*_*s G 15 c# mocking

我是嘲笑的新手,所以我可能在这里完全错了,但我相信大多数模拟框架都依赖于接口.不幸的是,我们的大部分代码都没有使用接口.前几天我在Java中看到了一个Mocking框架,它重现了类\ object的字节代码,而不是调用它的内部方法,但你仍然可以测试它是否正在调用这些方法.

我的问题是:.Net有没有可以做类似事情的模拟框架?我正在寻找一些免费的东西,我不想要一些需要虚拟或抽象方法的东西.

Ron*_*erg 10

Microsoft Research 为此开发了Moles,它是Pex的一部分,但可以独立安装.它是免费的.网站上有一篇很好的介绍性文章(pdf),解释了如何模拟静态方法.它们需要一些时间才能找到你想要的东西(第16页,任务3).

这里这里(第9频道)你可以找到一个关于如何存根的例子DateTime.Now.使用Moles,您可以模拟任何您想要的东西.


Mar*_*off 8

TypeMock Isolator可以模拟任何.NET类,但它不是免费的(或者便宜,甚至).我不确定它是如何工作的,但它实现了相同的最终结果.

但是大多数模拟框架并不完全依赖于接口; 他们也应该能够处理具体的类,尽管他们只能覆盖虚拟或抽象方法.


Tru*_*ill 6

您可以使用类而不是MoqRhino.Mocks的接口,但模拟的方法必须是虚拟的.Mark Rushakoff对TypeMock的回答是正确的(+1).

最好的选择是重构现有代码以实现可测试性(可能需要一些时间).我建议阅读Michael Feathers的"有效使用遗留代码".