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

时间:2010-07-12 16:24:50

标签: c# mocking

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

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

4 个答案:

答案 0 :(得分:10)

Microsoft Research为此开发了Moles,它是Pex的一部分,但可以独立安装。它是免费的。网站上有一个很好的introductory article (pdf),它解释了如何模拟静态方法。他们得到你想要的东西需要一些时间(第16页,任务3)。

Herehere(第9频道)您可以找到有关如何存根DateTime.Now的示例。使用Moles,你可以模拟任何你想要的东西。

答案 1 :(得分:8)

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

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

答案 2 :(得分:6)

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

最好的选择是重构现有代码以实现可测试性(可能需要一些时间)。我建议您阅读Michael Feathers的Working Effectively with Legacy Code

答案 3 :(得分:1)