【问题标题】:RhinoAutoMocker: generate different objects for some typeRhinoAutoMocker:为某些类型生成不同的对象
【发布时间】:2012-06-29 14:29:30
【问题描述】:
我已经开始使用 RhinoAutoMocker,我想知道是否有人可以帮助我解决我面临的问题。我有以下构造函数(由我要测试的对象公开):
public class MyViewModel{
public MyViewModel(ICommand cmd1, ICommand cmd2){
}
}
每个命令都会触发一个事件,该事件负责执行不同的操作。在使用 RhinoAutoMocker 之前,我可以简单地创建不同的模拟,这样我就可以控制我的视图模型运行的动作。现在我正在尝试将我的代码更新为 RhinoAutoMocker,它将尝试对两个参数使用相同的对象。我假设有一个简单的方法可以解决这个问题,但我不知道如何。谁能帮我一把?
谢谢。
【问题讨论】:
标签:
unit-testing
structuremap
rhino-mocks
【解决方案1】:
我设法通过在设置存根和访问被测类之前更改默认配置来解决这个问题:
[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));
}
}