2011-05-18 59 views
4

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

回答

4

痣的目标是让存根(和不是嘲笑)的一切,即使是静态或密封的方法。它是用痣手册写的,他们不像其他人那样嘲笑框架,而是提供隔离,而不是嘲笑。如果你想检查你的痣的电话,你必须做你自己的方式。 例如:

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

我的例子警告:到现在为止我没有找到如何调用一部开拓创新的构造,我的意思是这样

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

其实,从我在MSDN上阅读,这是不可能的...我希望以后的版本能够实现这一点。