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

本文关键字:期望 类型 创建 我可以 | 更新日期: 2023-09-27 17:56:42

我不仅需要交换实现,还需要添加必要的检查以确保某些方法以正确的顺序调用。我可以想象像 Mole + Mock 这样的东西会给我这个选择。有谁知道鼹鼠是否有这个功能?

这段代码应该很有帮助:

// 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();
};

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

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 Solator(功能强大但价格昂贵)和Telerik的JustMock(新的并发,也不是免费的)可以为一切启用模拟功能。
如果你有一些接口,委托和虚拟方法,使用免费的模拟框架,如Moq或RhinoMocks。

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

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

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