gpt4 book ai didi

.net - 我应该在 Web Api Core 中测试 CQRS 处理程序还是整个请求输出

转载 作者:行者123 更新时间:2023-12-01 15:33:08 26 4
gpt4 key购买 nike

我创建 Web API 已经有一段时间了,很高兴能够在不涉及任何类型的基础设施代码( Controller 、请求等)的情况下测试 CQRS 处理程序(由 Mediatr 管理)。而且完全有意义因为我的 Controller 非常瘦,因为他们正在做 Controller 应该做的事情:在请求和响应之间进行通信:

    [HttpGet("requests")]
public async Task<IEnumerable<AbsenceRequest>> GetAbsenceRequests(GetAbsenceRequests.Query query)
{
return await _mediator.Send(query);
}

但仍有一些情况是我的 Handlers 测试没有涵盖的。举几个例子:

  1. 授权。我无法测试是否有“错误”用户尝试访问具体操作,他收到拒绝访问错误。换句话说,我无法测试特定操作的授权属性。
  2. 错误处理。我可以检查我的处理程序是否抛出了特定的 特定条件下的异常,但我无法控制如何 基础设施(即异常中间件)处理了这个异常 (即导致特定的 HTTP 错误)。

ASP.NET Core 使得 request-in response-out 集成测试变得非常简单(感谢 TestServer),我可以在我的集成测试中涵盖这两种情况。

困扰我的问题是我应该保留 Handlers 测试还是通过发送请求和断言响应来测试操作。

我真的很喜欢 Handler 测试。它们很可爱,清晰且易于书写。测试整个请求功能更强大,但同时也更麻烦,因为它是一种相对低级的方法,您必须处理 http 和 json。

我觉得这个选择很困惑,想知道推荐的方法是什么。

最佳答案

我会使用单元测试来测试您的处理程序,因为这些测试可以运行得更快,并且应该比通过 MVC 测试处理程序更脆弱。没有充分的理由将处理程序的所有测试与当前的 MVC 实现结合起来。在决定是编写单元测试还是集成测试时,问题应该是“我可以用单元测试来测试它吗?”如果答案是肯定的,那就写一个单元测试。

也就是说,在 ASP.NET Core 中使用 TestServer 的集成测试非常棒(我写了 the docs on them )。您无法使用单元测试(您的处理程序或 Controller 操作方法的)测试某些东西,例如您的路由是否设置正确,或者您的 MVC 错误处理,或过滤器,或者模型绑定(bind)。您应该编写测试来确认这种行为,使用集成测试和 TestServer(如果您认为它们增加了值(value),那就是)。你不应该测试你已经有单元测试的所有相同的场景——那将是一种浪费。但是您可以使用这种方法验证单元测试无法验证的不同内容。

关于.net - 我应该在 Web Api Core 中测试 CQRS 处理程序还是整个请求输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42479643/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com