起订量要求?违背了目的?

2024-05-09

是否需要虚拟化您想要模拟的所有属性访问器就违背了模拟的目的?

我的意思是,如果我必须修改我的对象并虚拟化我想要模拟的每个访问器,我难道不能继承我的类并自己模拟它吗?


你的问题非常有效,但如果你仔细想想,没有其他方法可以模拟课程。如果你采用一个接口,它只是一个契约,所以模拟框架可以模拟你想要的方式,但如果你采用一个类,它已经有它的成员的实现。

因此,模拟框架为了能够模拟类成员,必须从类继承并根据请求覆盖成员的行为,为此只有虚拟成员才能工作。

例如。如果你有(我正在展示方法,但属性也是如此)

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(使用前将#替换为@)

起订量要求?违背了目的? 的相关文章

随机推荐