2009-01-10 35 views
0

假設包含ITache,IStockPalette等子對象的IMouvement對象。使用Rhino Mock模擬包含子對象的對象

public interface IMouvement : IObjectBase<Guid> 
{ 
     ITache Tache { get; set; } 
     IStockPalette StockPalOrigine { get; set; } 
} 

我該如何使用Rhino Mock對此進行模擬?

假設這個測試,這有什麼問題?

[TestMethod] 
public void Can_Validate_EmplacementTransitoireRule() 
{ 
    var mocks = new MockRepository(); 
    var mouvement = mocks.StrictMock<IMouvement>(); 
    var manager = mocks.StrictMock<ValidationManager>(); 

    mouvement.Tache = mocks.StrictMock<ITache>(); 
    mouvement.StockPalOrigine = mocks.StrictMock<IStockPalette>(); 
    mouvement.ID = Guid.NewGuid(); 

    var rule = new EmplacementTransitoireRule(mouvement); 
    manager.AddRule(rule); 

    Expect.Call(manager.ValidateAll()).Return(true); 

    mocks.ReplayAll(); 

    var all = manager.ValidateAll(); 

    mocks.VerifyAll(); 

    Assert.IsTrue(all); 
} 

這個測試總是失敗..

回答

1

通常我會成立於模擬對象的期望,而不是僅僅分配他們的財產。

Tache tache = mocks.StrictMock<Tache>(); 
Expect.Call(mouvement.Tache).Return(tache); 

另外,您可能希望使用AAA(排列,法,斷言)語法RhinoMocks - 我相信StrictMock已被棄用。

Mouvement mouvement = MockRepository.GenerateMock<Mouvement>(); 
Tache tache = MockRepository.GenerateMock<Tache>(); 

mouvement.Expect(m => m.Tache).Return(tache); 
tache.Expect(t => t.Value).Return(100); // or whatever 

... test code... 

tache.VerifyAllExpectations(); 
mouvement.VerifyAllExpectations(); 
+0

好吧,我剛剛嘗試過,但現在我面臨着另一個問題。我需要除了受保護的方法的結果,我可以使用InternalsVisibleTo Assembly Attribute來獲得與犀牛模擬的工作嗎? – 2009-01-10 16:09:32