Sib*_*Guy 2 .net cqrs asp.net-web-api mediatr asp.net-core
我创建Web API已有一段时间了,很高兴能够测试CQRS处理程序(由Mediatr管理)而无需接触任何类型的基础架构代码(控制器,requets等)。在执行控制器应该做的事情时非常薄:请求和响应之间的通信:
[HttpGet("requests")]
public async Task<IEnumerable<AbsenceRequest>> GetAbsenceRequests(GetAbsenceRequests.Query query)
{
return await _mediator.Send(query);
}
Run Code Online (Sandbox Code Playgroud)
但是仍然存在我的Handlers测试无法涵盖的情况。这里有几个例子:
ASP.NET Core使请求输入响应输出集成测试非常容易(由于使用了TestServer),我可以在集成测试中介绍这两种情况。
让我困扰的问题是我应该通过发送请求并声明响应来保持Handlers测试还是测试动作。
我真的很喜欢Handler测试。它们很可爱,清晰而且易于编写。测试整个请求的功能要强大得多,但同时它却是一个相对较低级别的方法,因此杂乱无章,您必须处理http和json。
我发现此选择非常令人困惑,并且想知道推荐的方法是什么。
我将使用单元测试来测试您的处理程序,因为与通过MVC测试处理程序相比,这些测试可以更快地运行并且不那么脆弱。没有充分的理由将所有对处理程序的测试耦合到当前的MVC实现。在决定编写单元测试还是集成测试时,问题应该是“我可以使用单元测试进行测试吗?” 如果答案是肯定的,则编写单元测试。
现在,这就是说,使用ASP.NET Core进行的集成测试TestServer
很棒(我在上面写了文档)。有些事情是您无法使用单元测试(处理程序或控制器操作方法)进行测试的,例如,路由是否正确设置,MVC错误处理,过滤器或模型绑定。您应该使用集成测试编写测试以确认此行为,并且TestServer
(如果您认为它们可以增加价值)。您不应该测试已经进行过单元测试的所有相同场景-这将是浪费。但是您可以使用这种方法来验证您的单元测试无法完成的其他工作。
归档时间: |
|
查看次数: |
988 次 |
最近记录: |