如何使用MediatR进行测试

时间:2016-07-10 22:48:34

标签: c# unit-testing mediatr

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

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

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

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

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

我使用MediatR实现此方法的方法是从控制器方法发出CancelOrder - 查询。然后我做了一个CancelOrderHandler,负责存储'cancelled'-flag。

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

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

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

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

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