我们已经使用 Moq 两个月了。但是有一个问题无法以某种方式解决。
在视觉工作室中,所有测试都成功了。在构建服务器上,有几个测试失败了。他们的共同点是,他们使用“raise”方法来抛出一个事件。我们的构建服务器测试混淆了发现混淆错误的好方法。像“Setup(something).Returns(something)”这样的每个“正常”期望都有效。只有 raise 事件失败。堆栈跟踪如下所示:
MESSAGE:
Test method Ade.Graphic.Presenter.Test.RoutingEngineTest.TestRouteOverLadderLinesWithFbd threw exception:
System.ArgumentException: Could not locate event for attach or detach method Void ᜀ(ᦜ[ᢈ]).
+++++++++++++++++++
STACK TRACE:
bei Moq.Extensions.GetEvent[TMock](Action`1 eventExpression, TMock mock)
bei Moq.Mock`1.Raise(Action`1 eventExpression, EventArgs args)
bei Ade.Graphic.Presenter.Test.RoutingEngineTest.TestRouteOverLadderLinesWithFbd()
代码是:
documentEventHandler.Raise(stub => stub.DocumentChanged += null,
new DocumentChangeEventArgs(DocumentChangeTypes.ViewUpdate));
我们不知道上面的代码和这个有什么区别
eventHandler.SetupGet(stub => stub.DocumentChangeNotify).Returns(documentEventHandler.Object);
因为这段代码工作正常。
有没有人有同样的问题,或者至少可以说出有什么区别?