9

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

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

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

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

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

我实现这个的方法MediatR是从控制器方法发出一个CancelOrder-query。然后,我制作了一个CancelOrderHandler负责存储“已取消”标志的文件。

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

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

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

有任何想法吗?

4

1 回答 1

1

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

于 2016-07-26T00:33:02.370 回答