1

私の質問は次のとおりです: 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 が発生します。「指定された引数に一致するコンストラクターがモックされた型で見つかりませんでした。」と表示されます。

前もって感謝します。

4

1 に答える 1

1

サービスをSUTに注入します(できればConstructor Injectionを使用します) 。これにより、次のような単体テスト コードを記述できます。

var mock = new Mock<IService>();

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

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

この例ではMoqを使用しています。

于 2010-07-20T11:56:30.460 に答える