c# - 如何使用 MediatR 进行测试

标签 c# unit-testing mediatr

我刚刚开始测试 MediatR清理我们大量涉及的网络 Controller 。实现它自己的功能一点也不难,但我在测试方面遇到了一些困难。

我从一个用于取消订单的 Controller 方法开始。

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

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

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

我用 MediatR 实现它的方法是从 Controller 方法发出一个 CancelOrder 查询。然后我制作了一个 CancelOrderHandler 负责存储“已取消”标志。

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

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

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

有什么想法吗?

最佳答案

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

关于c# - 如何使用 MediatR 进行测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38297118/

相关文章:

asp.net-core - FluentValidation 装饰器不适用于 autofac 和 mediator

c# - 如何在文本文件的中间插入行?

javascript - 如何在JQuery中获取UserControl中特定控件的Id

c# - 内容类型 text/html;响应消息的 charset=UTF-8 与绑定(bind)的内容类型不匹配(text/xml;charset=utf-8)

Java (JUnit 4.xx) 如何使用模拟工具强制调用 try block 中的 void 方法异常?

c# - 无法访问已处置的对象。对象名称 : 'IServiceProvider' error in AspNet Core/EF Core project

c# - DependencyInjectionConfig 中的 MediatR 问题与 Autofac

c# - String.Empty 或 null : what is better to return for "Error" field from service?

c++ - 如何在 Clion 中查看代码覆盖率

python - App Engine 单元测试 : ImportError: Start directory is not importable