【发布时间】:2015-02-25 18:08:59
【问题描述】:
我目前正在使用 Moq 库进行单元测试。 Moq 使我能够在模拟对象上注册回调 before 和 after 方法调用,如下所示:
Mock<IMyClass> mock = new Mock<IMyClass>();
mock.Setup(o => o.MyMethod())
.Callback(() => Console.WriteLine("BEFORE!"))
.Returns(true)
.Callback(() => Console.WriteLine("AFTER!"));
但是,如果 MyMethod 没有返回值(即它具有 void 返回类型),那么我只能像这样设置一个回调:
mock.Setup(o => o.MyMethod())
.Callback(() => Console.WriteLine("BEFORE!"));
如代码中所述,此回调发生在调用方法之前。似乎没有任何其他选项可以为 在方法被调用之后指定第二个回调。
这可能吗?文档中似乎没有任何关于它的内容。我错过了什么吗?
【问题讨论】:
-
我不确定您所说的 HandleMessage 未完成是什么意思。 HandleMessage 正在做的唯一 事情是调用
waitHandle.Reset。WaitOne等待设置句柄,如果您从处于信号状态的ManualResetEvent开始,则测试线程可能会在调用HandleMessage之前通过WaitOne。我认为您会希望以无信号状态的ManualResetEvent开始,然后您的处理程序将调用Set。但是,如果您尝试测试调用 HandleMessage 后发生的某些行为,则需要另一种方法。 -
哈...我误用了 ManualResetEvent。德普。现在一切正常。我将删除我的具体案例的详细信息,因为它们会使其他发现此问题的人感到困惑。谢谢!
标签: c# unit-testing moq