我可以设定对Moles创建的痣类型的期望吗?

时间:2011-05-18 13:46:50

标签: c# .net moles pex-and-moles

我不仅需要交换实现,还需要添加必要的检查以确保以正确的顺序调用某些方法。我可以想象Mole + Mock会给我这个选项。有人知道Moles是否有此功能吗?

此代码应该有用:

// Verify if Dispose was called
MDisposableObject.Constructor = delegate(DisposableObject instance)
{
    MDisposableObject mole = new MDisposableObject(instance);
    ...
    // This doesn't work 
    //objectContext.Expects(i => i.Dispose()).ToBeCalledOneTime();
};

1 个答案:

答案 0 :(得分:4)

Moles旨在为所有内容提供存根(和非模拟),即使对于静态或密封方法也是如此。它在Moles手册中写道,他们并没有像其他人一样嘲弄框架模仿框架:他们提供隔离,而不是模拟。如果你想查看你的Moles上的电话,你必须按自己的方式行事。 例如:

    bool called = false;
    MDisposableObject.Constructor = (@this) =>
    {
        var mole = new MDisposableObject(@this)
        {
            Dispose = () =>
                {
                    Assert.IsFalse(called);
                    called=true;
                    //if you want to call the original implementation:
                    MolesContext.ExecuteWithoutMoles(() => (@this).Dispose());
                    //or do something else, even nothing
                }

        };
    };

只有Typemock Isolator(功能强大但价格昂贵)和JustMock的Telerik(新的并发,也不是免费)可以为所有内容启用模拟功能。
如果您有一些接口,委托和虚方法,请使用免费的模拟框架,如Moq或RhinoMocks。

关于我的例子的警告:直到现在我还没有找到如何调用orignal构造函数,我的意思是

var mole = new SDisposable();
(@this) = mole;
new MDisposable(mole) {...};

实际上,从我在msdn上看到的内容来看,这是不可能的......我希望以下版本能够实现这一目标。

相关问题