0

ITache、IMStockPalette などのいくつかのサブオブジェクトを含む IMouvement オブジェクトを想定しています。

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);
}

このテストは常に失敗します..

4

1 に答える 1

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();
于 2009-01-10T15:44:51.943 に答える