2011-05-18 48 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上閱讀,這是不可能的...我希望以後的版本能夠實現這一點。