2010-07-20 84 views
1

我的問題如下:我如何測試一個模擬對象上是否調用了ICommand的Execute方法?測試ICommand是否被執行

我用下面的代碼:

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的也和我想要測試是否的ICommand被執行時,我打電話EditCommand.Execute在工具欄TrayVM上。

我在調用Verify時得到一個ArgumentException。它說:「給定參數的匹配構造函數在模擬類型上找不到。」

在此先感謝。

+0

您能否提供更多的代碼?您如何使用ICommand,示例測試代碼以及​​您想要測試的內容。 – 2010-07-20 11:55:35

+0

你正在使用哪個模擬框架(如果有的話)? – 2010-07-20 11:59:51

+0

我正在使用Moq框架。 – Zoliqa 2010-07-20 12:03:32

回答

1

將服務注入SUT - 最好使用構造函數注入。這將使您能夠編寫像這樣的單元測試代碼:

var mock = new Mock<IService>(); 

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

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

本示例使用Moq

+1

你能提供更多細節嗎?什麼是IService?富()? – droughtrain 2013-10-09 15:18:45

+0

它是一個依賴接口,爲db服務。你需要嘲笑它能夠注入你的視圖模型。 – 2017-03-23 01:55:43