定义了一个接口
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);这是失败的。简单地说,不调用委托。请帮我弄一下这个。
发布于 2012-10-23 07:54:26
你举的例子不清楚。您实际上是在测试自己的mock。
在模拟代理作为依赖项传递给测试对象的场景中,您不需要设置事件处理程序,而是引发它。
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.Mock要么使用.Raise()替换事件源,要么替换将使用测试事件的另一个类的对象(以断言事件已被引发),在这种情况下,您可以使用.Callback()在本地标志变量中记录“处理”事件。
https://stackoverflow.com/questions/13020511
复制相似问题