2009-12-01 96 views
1

我剛剛使用Rhino mocks製作了以下測試。我的測試看起來有效,對那些更有經驗的嘲笑者有意義嗎?犀牛嘲笑 - 這個測試看起來是否合理?

我是一個有點困惑,我還沒有使用DynamicMock()StrictMock()方法來創建一個看似有效的測試。

此測試測試使用提供的參數在提供的ICachingStrategy上調用Add方法。

object o = new object(); 
    DateTime d = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day + 1, 0, 0, 0); 
    CacheStorageStyle s = CacheStorageStyle.Unmodified; 
    string f = "test"; 

    //arrange 
    var stubStrategy = MockRepository.GenerateStub<ICachingStrategy>(); 
    var stubEncoder = MockRepository.GenerateStub<ICacheItemEncoder>(); 
    stubStrategy.Stub(x => x.Add(o,d,s,f)).Return("test:key");    
    stubEncoder.Stub(x => x.Encode(o,s)).Return(o); 

    _mocks.ReplayAll(); 

    //act 
    ICache c = new Cache(stubStrategy, stubEncoder); 
    c.Add(o, d, s, f); 

    //assert 
    stubStrategy.AssertWasCalled(x => x.Add(o,d,s,f)); 

回答

4

問題是:它成功了嗎?你期望它?如果答案是肯定的,那麼測試是好的。您可以進一步測試該測試,方法是通過在您的實施中致電Add()來強制失敗。如果沒有調用Add()方法,則測試應該失敗。

Here是解釋存根和嘲difference之間差異的相關文檔。本質區別在於存根「永遠不會導致測試失敗」。他們只是爲了使測試代碼正常工作。文件進一步建議儘可能優先考慮樁頭。

您的測試對我而言似乎有效,因爲您主要關注是否調用了Add()方法,並且您明確聲明瞭該調用。你沒有測試其他的方法調用,所以你不是在嘲笑它們,而是在扼殺它們。

1

re:Strict vs Dynamic - 值得注意的另一件事是,在RhinoMocks 3.5中調用MockRepository.GenerateMock()不會產生嚴格的模擬。

根據您的測試,您可能會/可能不在乎您的模擬上未被調用的內容。