RhinoAutoMocker:为某种类型生成不同的对象

时间:2012-06-29 14:29:30

标签: unit-testing structuremap rhino-mocks

我已经开始使用RhinoAutoMocker,我想知道是否有人可以帮我解决我面临的问题。我有以下构造函数(由我想测试的对象公开):

public class MyViewModel{
   public MyViewModel(ICommand cmd1, ICommand cmd2){
   }
}

每个命令都会触发一个事件,该事件负责执行不同的操作。在使用RhinoAutoMocker之前,我可以简单地创建不同的模拟,这将允许我控制我的视图模型运行的操作。既然我正在尝试将我的代码更新为RhinoAutoMocker,它将尝试对两个参数使用相同的对象。我假设有一种简单的方法可以解决这个问题,但我不知道如何解决这个问题。谁能帮我一把?

感谢。

1 个答案:

答案 0 :(得分:0)

我设法通过在设置存根和访问被测试的类之前更改默认配置来解决此问题:

[TestFixture]
public class BoletimViewModelApresentaDlgPdf {
    [Test]
    public void Test() {
        var geraRelatorioCmd = MockRepository.GenerateStub<ICommand>();

        var autoMocker = new RhinoAutoMocker<BoletimViewModel>();
        autoMocker.Container.Configure(
            conf => {
                conf.For<BoletimViewModel>()
                    .Use<BoletimViewModel>()
                    .Ctor<ICommand>("geraRelatorio").Is(geraRelatorioCmd);
            }
        );

        autoMocker.ClassUnderTest.GeraRelatorio
            .Raise( cmd => cmd.CommandExecuted += null,
                    autoMocker.ClassUnderTest.GeraRelatorio,
                    new CommandParameterEventArgs(new object() ));

        autoMocker.Get<IVisualizadorBoletim>()
            .AssertWasCalled( v => v.VisualizaBoletim(
                Arg<IEnumerable<DadosHorticulas>>.Is.Anything,
                Arg<DateTime>.Is.Anything,
                Arg<DateTime>.Is.Anything));

    }
}
相关问题