C# 使用Rhino Mock模拟包含子对象的对象

C# 使用Rhino Mock模拟包含子对象的对象,c#,.net,rhino-mocks,C#,.net,Rhino Mocks,假设iMovement对象包含一些子对象(如ITache),则IStockPalette public interface IMouvement : IObjectBase<Guid> { ITache Tache { get; set; } IStockPalette StockPalOrigine { get; set; } } 公共接口IMouvement:IOObjectBase { ITache链接{get;set;} IStockPale

假设iMovement对象包含一些子对象(如ITache),则IStockPalette

public interface IMouvement : IObjectBase<Guid>
{
        ITache Tache { get; set; }
        IStockPalette StockPalOrigine { get; set; }
}
公共接口IMouvement:IOObjectBase
{
ITache链接{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);
}
[TestMethod]
public void可以\u验证\u安放TransitoireRule()
{
var mocks=new MockRepository();
var mouvement=mocks.StrictMock();
var manager=mocks.StrictMock();
mouvement.Tache=mocks.StrictMock();
mouvement.StockPalOrigine=mocks.StrictMock();
mouvement.ID=Guid.NewGuid();
var规则=新侵位过渡规则(移动);
manager.AddRule(规则);
Expect.Call(manager.ValidateAll()).Return(true);
mocks.ReplayAll();
var all=manager.ValidateAll();
mocks.VerifyAll();
Assert.IsTrue(全部);
}

此测试总是失败。

通常我会对模拟对象设置期望值,而不仅仅是分配它们的属性

 Tache tache = mocks.StrictMock<Tache>();
 Expect.Call( mouvement.Tache ).Return( tache );
Tache-Tache=mocks.StrictMock();
Expect.Call(mouvement.Tache).Return(Tache);
另外,您可能希望对Rhinomock使用(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();
Mouvement Mouvement=MockRepository.GenerateMock();
Tache-Tache=MockRepository.GenerateMock();
mouvement.Expect(m=>m.Tache).Return(Tache);
tache.Expect(t=>t.Value).Return(100);//或者别的什么
... 测试代码。。。
环节。验证所有预期();
movement.verifyallexpections();

好的,我刚试过,但现在我面临另一个问题。我需要排除受保护方法的结果,我可以使用InternalsVisibleTo Assembly属性来处理rhino Mock吗?