首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >模拟EventHandler

模拟EventHandler
EN

Stack Overflow用户
提问于 2012-10-23 05:55:39
回答 1查看 7.9K关注 0票数 6

定义了一个接口

代码语言:javascript
复制
 public interface IHandlerViewModel {
         EventHandler ClearInputText { get; } 
}

我想测试一下是否通过某种方法调用了ClearInputText。为了做到这一点,我这样做

代码语言:javascript
复制
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);

这是失败的。简单地说,不调用委托。请帮我弄一下这个。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-23 07:54:26

你举的例子不清楚。您实际上是在测试自己的mock。

在模拟代理作为依赖项传递给测试对象的场景中,您不需要设置事件处理程序,而是引发它。

代码语言:javascript
复制
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()在本地标志变量中记录“处理”事件。

票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13020511

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档