2010-07-19 74 views
2

真的,嘲笑框架和Rhino嘲讽在特定的只有嘲笑接口和虚拟方法的类吗?例如,我可以模仿以下简单的类:Mocking none接口类

public class MyClass 
{ 
    void method1() 
    { 
     //some code goes here 
    } 
} 

如果答案是正确的,为什么存在这样的限制?有没有解决方法?

回答

5

该限制存在,因为模拟框架不能改变method1而不是虚拟或界面。这是一个合理的限制,因为接口允许您解耦您的依赖关系,并且是良好代码的常见特征,即IMO。不幸的是,大多数.Net框架没有虚拟方法或接口......这需要丑陋的包装才能创建接口。

如果你真的不喜欢它,那么一个模仿框架选项,通过将CLR与一些疯狂的魔法foo连接起来,可以超越限制。那个名气被称为TypeMock Isolator

+0

您可以绕行使用MS痣类似的方式非界面甚至通话静,虽然痣仍处于实验阶段,而不是一个完整的模拟框架:http://research.microsoft.com/en- us/projects/moles/ – 2010-07-19 19:39:58

+0

Brian - 我不会真的称之为“疯狂的魔法富”。这只是Microsoft Profiling API(http://msdn.microsoft.com/en-us/library/bb384382%28VS.90%29.aspx)。 :) – PatrickSteele 2010-07-19 22:20:08

+0

@帕特里克斯蒂尔:够公平的。它只是感觉像疯狂的魔法foo :) – 2010-07-20 12:36:43

1

我不知道你将如何模拟一个没有实现接口或虚拟方法的类。如果某些代码需要MyClass的实例并将其传递给MyDerivedMockClass的实例,则MyClass成员将被访问而不是MyDerivedMockClass成员,因为它们不是被覆盖的虚拟成员。