问题描述
我在MVC,CQRS应用程序中有问题。我正在尝试为应用程序层编写单元测试,其中处理程序需要将IMediator注入构造函数,我试图使用MOQ进行模拟,但显然缺少一些设置:
然后,在WorkOrder查询处理程序中使用中介程序将查询发送到另一个对象(联系人)。
但是我似乎无法正常工作,第二个调解器调用没有到达queryhandler。
请那里有人遇到相同的问题,或者知道如何设置它才能正常工作。
解决方法
考虑到设置初始模拟的方式,我知道您正在将模拟的Mediator
传递给处理程序。通过处理程序对Send
的调用失败,因为您正在通过模拟对象进行调用。理想情况下,您可以模拟Send
方法所期望的行为,并设置由于Send
调用而想要返回的结果。
请记住,您使用Mocks是因为您不希望在测试环境中触发实际行为。
可以如下所示模拟行为
// within your test method
mediator.SetUp(m => m.Send(It.IsAny<GetContactDomainQuery>()))
.Returns(<whatever you want your mocked behaviour to return>);
看看documentation of Moq,以进一步了解模拟的各种变体。