如何使用MediatR进行测试

Veg*_*gar 8 c# unit-testing mediatr

我刚开始测试MediatR清理我们繁重的网络控制器.实现自己的功能并不难,但我在测试方面有点挣扎.

我开始使用控制器方法取消订单.

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

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

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

我实现这个的方法MediatRCancelOrder从控制器方法发出一个-query.然后我做了一个CancelOrderHandler负责存储'cancelled'标志的人.

使用自定义MediatorPipeline实现,OrderCancelled如果CancelOrderHandler不抛出任何异常,我会发出-notification .

我有两个处理程序用于此通知:OrderCancelledAuditLogHandlerOrderCancelledNotificationHandler.第一个将处理审计日志,而第二个将发送通知.

每个处理程序都很容易测试.但是,我怎样才能测试一切"合适"?我想确保在取消订单时,实际上会处理审计日志和通知.所有处理程序都会执行我在测试执行期间真正不需要的东西(数据库写入和电子邮件发送),而且我并不热衷于进行全面的端到端集成测试.

有任何想法吗?

cle*_*son 1

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