是否需要虚拟化您想要模拟的所有属性访问器就违背了模拟的目的?
我的意思是,如果我必须修改我的对象并虚拟化我想要模拟的每个访问器,我难道不能继承我的类并自己模拟它吗?
你的问题非常有效,但如果你仔细想想,没有其他方法可以模拟课程。如果你采用一个接口,它只是一个契约,所以模拟框架可以模拟你想要的方式,但如果你采用一个类,它已经有它的成员的实现。
因此,模拟框架为了能够模拟类成员,必须从类继承并根据请求覆盖成员的行为,为此只有虚拟成员才能工作。
例如。如果你有(我正在展示方法,但属性也是如此)
class Foo
{
public void Bar()
{
}
public virtual void virtualBar()
{
}
}
那么模拟框架可能会创建类似的东西来模拟
public class MockFoo : Foo
{
public override void virtualBar()
{
// mockery action
}
public new void Bar()
{
// mockery action
}
}
现在当你有
Foo foo = GetMockObject(); // you get an instance of MockFoo
现在当你打电话时
foo.Bar();
您不打算让它调用实际的实现,但由于它是非虚拟成员,因此它会调用Foo
's Bar()
另一方面,调用
foo.VirtualBar();
会打电话MockFoo
's VirtualBar()
因为它是一个虚拟成员,它将具有模拟框架根据请求注入的行为。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)