Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我可以设定使用鼹鼠创建的鼹鼠类型的期望值吗?_C#_.net_Moles_Pex And Moles - Fatal编程技术网

C# 我可以设定使用鼹鼠创建的鼹鼠类型的期望值吗?

C# 我可以设定使用鼹鼠创建的鼹鼠类型的期望值吗?,c#,.net,moles,pex-and-moles,C#,.net,Moles,Pex And Moles,我不仅需要交换实现,还需要添加必要的检查,以确保以正确的顺序调用某些方法。我可以想象像Mole+Mock这样的东西会给我这个选择。有人知道鼹鼠是否有这种特征吗 此代码应该有帮助: // Verify if Dispose was called MDisposableObject.Constructor = delegate(DisposableObject instance) { MDisposableObject mole = new MDisposableObject(instanc

我不仅需要交换实现,还需要添加必要的检查,以确保以正确的顺序调用某些方法。我可以想象像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
                }

        };
    };
只有(功能强大但价格昂贵)和Telerik(新的并发,也不是免费的)才能为所有内容启用模拟功能。
如果您有一些接口、委托和虚拟方法,请使用像Moq或Rhinomock这样的免费模拟框架

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

var mole = new SDisposable();
(@this) = mole;
new MDisposable(mole) {...};
事实上,从我在msdn上看到的,这是不可能的。。。我希望以下版本能够实现这一点