我刚开始测试MediatR
以清理我们繁重的网络控制器。实现自己的功能并不难,但我在测试方面有点挣扎。
我开始使用控制器方法取消订单。
当订单被取消时,我们在哪里
所有这些都是在控制器方法中触发的,使得控制器依赖于几种不同的服务。在测试时,我们必须模拟每个部分以隔离我们想要测试的行为。
我使用MediatR
实现此方法的方法是从控制器方法发出CancelOrder
- 查询。然后我做了一个CancelOrderHandler
,负责存储'cancelled'-flag。
使用自定义MediatorPipeline
- 实现,如果OrderCancelled
没有抛出任何异常,我会发出CancelOrderHandler
- 通知。
此通知有两个处理程序:OrderCancelledAuditLogHandler
和OrderCancelledNotificationHandler
。第一个将处理审计日志,而第二个将发送通知。
每个处理程序都很容易测试。但是,我怎样才能测试一切“合适”?我想确保在取消订单时,实际上会处理审计日志和通知。所有处理程序都会执行我在测试执行期间真正不需要的东西(数据库写入和电子邮件发送),而且我并不热衷于进行全面的端到端集成测试。
有什么想法吗?
答案 0 :(得分:1)
我正在处理同样的问题。我倾向于单独测试处理程序中使用的每个组件,然后构建它,不知何故不是100%确定,我测试请求和处理程序的方式与Bogard先生进行测试的方式相同GitHub上的Mediatr项目