6

インターフェイスを定義した

 public interface IHandlerViewModel {
         EventHandler ClearInputText { get; } 
}

ClearInputText が何らかのメソッドによって呼び出されるかどうかをテストしたいと思います。そうするために、私はこのようなことをします

SomeType obj=new SomeType();
bool clearCalled = false;
var mockHandlerViewModel=new Mock<IHandlerViewModel>();
mockHandlerViewModel.Setup(x => x.ClearInputText).Returns(delegate { clearCalled = true; });

obj.Call(mockHandlerViewModel.Object);//void Call(IHandlerViewModel);
Assert.IsTrue(clearCalled);

これは失敗します。デリゲートが呼び出されないだけです。これで私を助けてください。

4

1 に答える 1

16

あなたが与える例は明確ではありません。基本的に、独自のモックをテストしています。

モック化されたプロキシが依存関係としてテスト対象のオブジェクトに渡されるシナリオでは、イベント ハンドラーを設定せずに発生させます。

var mockHandlerViewModel = new Mock<IHandlerViewModel>();
var objectUnderTest = new ClassUnderTestThatTakesViewModel(mockHandlerViewModel.Object);
// Do other setup... objectUnderTest should have registered an eventhandler with the mock instance. Get to a point where the mock should raise it's event..

mockHandlerViewModel.Raise(x => x.ClearInputText += null, new EventArgs());
// Next, Assert objectUnderTest to verify it did what it needed to do when handling the event.

モックは、.Raise() を使用してイベント ソースを置き換えるか、テストのイベントで別のクラスを消費するオブジェクトを置き換えます (イベントが発生したことをアサートするため)。ローカル フラグ変数のイベント。

于 2012-10-22T23:54:26.387 に答える