我目前正在用rhino mocks创建一些单元测试,我有一个如下所示的测试。不过,我不断收到此错误信息,我们如何让lambda函数在Rhino Mock对象的一部分的方法中执行?
IOsgController.AddWindow(Whiteboard.Model.OsgWindowProps); Expected #1, Actual #0.
这是由于未在_dispatcher.BeginInvoke(()=>_osgController.AddWindow)
执行的lambda函数。如何使Action
在我的单元测试中得到执行?被测
public void the_load_command_is_triggered_which_executes_the_load_control_method()
{
// arrange
IOsgController osgController = MockRepository.GenerateMock<IOsgController>();
IDispatcher dispatcher = MockRepository.GenerateMock<IDispatcher>();
Action action = osgController.AddWindow;
OsgViewModel osgViewModel = new OsgViewModel(osgController, dispatcher);
// dispatcher and add window should be called in LoadControl
dispatcher.Expect(d => d.BeginInvoke(action)).WhenCalled(i => action());
osgController.Expect(x => x.AddWindow());
// act
osgViewModel.LoadCommand.Execute(new object());
// assert
osgController.VerifyAllExpectations();
}
类是:
public class OsgViewModel : ViewModelBase
{
private readonly IOsgController _osgController;
private readonly IDispatcher _dispatcher;
public OsgViewModel(IOsgController osgController, IDispatcher dispatcher)
{
_osgController = osgController;
_dispatcher = dispatcher;
LoadCommand = new RelayCommand(LoadControl);
}
public ICommand LoadCommand { get; set; }
public void LoadControl()
{
// lambda is not being executed in unit test.
_dispatcher.BeginInvoke(
() => _osgController.AddWindow());
}
}
感谢您的回复。它实际上是已注入的IDispatcher接口,而不是您正在考虑的WPF应用程序调度程序。问题是传递给BeginInvoke方法的lambda函数没有被执行。 – Seth