测试命令是否已执行

时间:2010-07-20 11:50:23

标签: wpf mocking icommand

我的问题如下:我如何测试是否在模拟对象上调用了ICommand的Execute方法?

我正在使用以下代码:

var mockOperandVM = new Mock<UCOperandViewModel> ();  
mockOperandVM.Setup (x => x.EditCommand).Returns (new RelayCommand<String> (x => { }));  

var toolbarTrayVM = new UCToolbarTrayViewModel (mockComponentsLocator.Object);
toolbarTrayVM.EditCommand.Execute ("Edit");
mockOperandVM.Verify (x => x.EditCommand.Execute ("Edit"), "EditCommand with 'Edit' parameter was not executed on the mock object.");

我必须在这里指定我在UCOperandViewModel上也有一个EditCommand ICommand,我想测试当我在toolbarTrayVM上调用EditCommand.Execute时是否执行该ICommand。

我在调用Verify时遇到ArgumentException。它说“在模拟类型上找不到给定参数的匹配构造函数。”。

提前致谢。

1 个答案:

答案 0 :(得分:1)

将服务注入SUT - 最好使用构造函数注入。这将使您能够编写如下单元测试代码:

var mock = new Mock<IService>();

var sut = new MyViewModel(mock.Object);
sut.SomeCommand.Execute(null);

mock.Verify(s => s.Foo());

此示例使用Moq