起订量和访问调用的参数
我刚刚开始在我已经建立的项目上实施单元测试(使用 xUnit 和 Moq)。该项目通过统一容器广泛使用依赖注入。
我有两个服务 A 和 B。服务 A 是本例中正在测试的服务。服务 A 调用 B 并为其提供内部函数的委托。当收到必须处理的消息时,此“回调”用于通知 A。
因此 A 调用(其中 b 是服务 B 的实例):
b.RegisterHandler(Guid id, Action<byte[]> messageHandler);
为了测试服务 A,我需要能够调用 messageHandler
,因为这是它当前接受消息的唯一方式。
这可以使用起订量来完成吗? IE。我可以模拟服务 B,以便在调用 RegisterHandler
时,将 messageHandler
的值传递给我的测试吗?
或者我需要重新设计这个吗?在这种情况下我应该使用任何设计模式吗?有谁知道这种设计有什么好的资源吗?
I've just started to implement unit tests (using xUnit and Moq) on an already established project of mine. The project extensively uses dependency injection via the unity container.
I have two services A and B. Service A is the one being tested in this case. Service A calls B and gives it a delegate to an internal function. This 'callback' is used to notify A when a message has been received that it must handle.
Hence A calls (where b is an instance of service B):
b.RegisterHandler(Guid id, Action<byte[]> messageHandler);
In order to test service A, I need to be able to call messageHandler
, as this is the only way it currently accepts messages.
Can this be done using Moq? ie. Can I mock service B, such that when RegisterHandler
is called, the value of messageHandler
is passed out to my test?
Or do I need to redesign this? Are there any design patterns I should be using in this case? Does anyone know of any good resources on this kind of design?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您可以通过使用 Mock 上的 Callback(名称相似性是偶然的)方法来获取回调(或任何其他输入参数)的实例:
当 ServiceA 定义如下时,此方法有效:
You can get an instance of the callback (or any other input parameter) by using the Callback (the name similarity is incidental) method on the Mock:
This works when ServiceA is defined as this:
是的,您可以设置 Moq 对象来响应预期和意外的操作。
这是一个 Visual Studio 单元测试示例...
Yes you can setup the Moq object to respond to expected and unexpected operations.
Here's a Visual Studio Unit Test example...