2012-10-22 32 views
5

Sau khi định nghĩa một giao diệnMocking EventHandler

public interface IHandlerViewModel { 
     EventHandler ClearInputText { get; } 
} 

Tôi muốn kiểm tra xem ClearInputText được gọi bằng một số phương pháp. Để làm như vậy, tôi làm điều gì đó như thế này

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); 

không thành công. Đơn giản là đại biểu không được gọi. Hãy giúp tôi với điều này.

+2

ủy quyền {copyCalled = true;} -> ủy quyền {clearCalled = true;} –

+0

vui lòng thêm mã nơi bạn đang thực sự gọi trình xử lý sự kiện –

Trả lời

8

Ví dụ bạn đưa ra không rõ ràng. Về cơ bản, bạn đang thử nghiệm mô hình của riêng mình.

Trong trường hợp proxy giả mạo được truyền dưới dạng phụ thuộc vào đối tượng đang thử nghiệm, bạn không thiết lập trình xử lý sự kiện, bạn hãy nâng cao nó.

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. 

Mocks hoặc thay thế các nguồn sự kiện bằng cách sử dụng nâng cao chúng(), hoặc họ thay thế một đối tượng mà sẽ tiêu thụ một lớp khác dưới sự kiện thử nghiệm của (để khẳng định sự kiện này đã được nâng lên), trong trường hợp bạn sử dụng .Callback () để ghi lại "xử lý" sự kiện trong biến cờ cục bộ.