如何使用MediatR进行测试

本文关键字:测试 MediatR 何使用 | 更新日期: 2023-09-27 17:56:27

我刚刚开始测试MediatR来清理我们繁重的Web控制器。实现它自己的功能一点也不难,但我在测试方面有点挣扎。

我从取消订单的控制器方法开始。

当订单被取消时,我们在哪里

  • 对数据库中的数据设置"已取消"标志
  • 在审核日志中记录取消会议的人员
  • 通过电子邮件向某些主管发送通知。

所有这些都是在控制器方法内部触发的,使控制器依赖于几个不同的服务。在测试时,我们必须模拟每个部分,以隔离我们想要测试的行为。

我使用 MediatR 实现这一点的方式是从控制器方法发出一个CancelOrder查询。然后,我做了一个CancelOrderHandler,负责存储"取消"标志。

使用自定义MediatorPipeline实现,如果CancelOrderHandler不引发任何异常,我会发出OrderCancelled通知。

我有两个处理此通知的处理程序:OrderCancelledAuditLogHandlerOrderCancelledNotificationHandler 。第一个将处理审核日志,而第二个将发送通知。

每个处理程序都易于测试。但是,我如何测试所有东西是否"适合在一起"呢?我想确保在取消订单时,审核日志和通知实际上得到了处理。所有处理程序在测试执行期间都会做我真正不希望的事情(数据库写入和电子邮件发送),而且我不热衷于成熟的端到端集成测试。

有什么想法吗?

如何使用MediatR进行测试

我正在处理同样的问题。 我倾向于单独测试处理程序中使用的每个组件,然后构建它,不知何故还不是 100% 确定,我以与 Bogard 先生在 GitHub 上为 Mediatr 项目进行测试的方式测试请求和处理程序