假设一个IMouvement对象包含一些子对象,如ITache,IStockPalette。
public interface IMouvement : IObjectBase<Guid>
{
ITache Tache { get; set; }
IStockPalette StockPalOrigine { get; set; }
}
我如何使用Rhino Mocks进行模拟?
假设这个测试,这有什么问题?
[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);
}
此测试总是失败..
答案 0 :(得分:1)
通常我会设置对模拟对象的期望,而不仅仅是分配它们的属性。
Tache tache = mocks.StrictMock<Tache>();
Expect.Call( mouvement.Tache ).Return( tache );
此外,您可能希望使用RhinoMocks的AAA(Arrange-Act-Assert)语法 - 我相信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();