使用 xunit 和 moq 进行 net core api 控制器单元测试

吉米鞋

我有一些 api 控制器方法,我想向其中添加一些单元测试。我正在使用 xunit 和 moq,并使用 asp net core 用 c# 编写。

一种方法的例子是:

public async Task<ActionResult<List<StatusDTO>>> Get()
{
    return await _statusservice.GetStatusesAsync();
}

此时,我的控制器方法只是返回服务层方法正在返回的 dto。将来它可能会更改为返回特定的视图模型。

我已阅读https://docs.microsoft.com/en-us/aspnet/core/mvc/controllers/testing?view=aspnetcore-2.2以获取有关测试控制器的一些指导。

我的问题是:例如上面的单元测试是否只包括 - 检查返回类型ActionResult<StatusDTO>和/或(使用 moq)验证服务方法是否已被调用。

我应该设置我的服务方法来返回一个模拟StatusDTO并对此做一些断言。在这种情况下,我看不到这样做的好处,因为那将是测试服务方法,不是吗,我将在服务方法测试中介绍这一点。

对不起,如果这看起来很基本 - 我在编写单元测试方面的知识和经验非常有限。谢谢你的帮助。

克里斯普拉特

一般来说,你不应该成为单元测试控制器。有警告,但因此是“一般”。例如,如果您有一些辅助方法,则对控制器的特定方法进行单元测试可能是合适的,但操作通常太复杂而无法进行可靠的单元测试。

这里有一个HttpContext,一个ActionContextSessionUser等-都需要通过模拟考试,以满足所有这些都可能会以不同的方式可能使用的所有的依赖和。当然,您可以模拟所有依赖项,但是当您完成此操作时,您的测试代码比实际应用程序代码长 100 倍,并且最终您的测试最终通过还是失败开始与是否有更多关系您已经正确地模拟了所有内容,而不是您的实际应用程序代码是否正确。

然后,特别是在这种情况下,您的操作只做一件事:调用服务类上的方法。服务类是应该进行单元测试的,假设它是经过联合测试的,那么为此操作添加单元测试不会增加任何内容。

总之,动作更适合集成测试。您应该将尽可能多的操作逻辑分解为可以单独进行单元测试(您已经完成)的方法或类,然后您只需测试集成,即特定请求会导致特定响应。

有关 ASP.NET Core 中集成测试的更多信息,请参阅相关文档它更适合 Razor 页面,但无论您是集成测试 Razor 页面、MVC 操作还是 API 操作,方法都是相同的。这只是一个导致响应的请求。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用.NET Core和xUnit同时针对多个框架的单元测试代码

在使用Moq和AutoFixture进行单元测试API时模拟HttpResponseMessage

如何在ASP.NET Core 1.1中对使用HttpContext的MVC控制器进行单元测试

使用Moq .net Core进行单元测试文件上传

使用JWT声明对.NET Core Web API控制器进行单元测试

如何使用Entity Framework和Moq进行单元测试?

使用Moq和Xunit测试接口

使用LINQ-EF Core 2通过DI DbContext和模型对控制器进行单元测试

使用Spring Boot,Kotlin和Junit进行休息控制器单元测试

在ConfigureServices中使用自定义HttpClient和Polly策略进行单元测试核心API控制器

使用Moq和xUnit对服务进行单元测试

使用Moq和Mock设置的具有IConfiguration的单元测试控制器返回null

使用Asp.Net Web Api和客户筛选器进行单元测试

如何模拟ExceptionContext以使用.NET Core 3 Web API和Moq进行测试

如何使用XUnit对Web API控制器进行单元测试

单元测试.NET Core 3 Web API控制器

如何使用Moq对.NET Core 3.1中的LoggerMessage.Define()进行单元测试?

使用Moq对MVC6中的控制器路由功能进行单元测试

如何对返回匿名对象的ASP.NET Core MVC控制器进行单元测试?

使用Moq和Autofac进行单元测试

如何使用 Moq 对具有三个依赖项的 MVC 控制器进行单元测试

使用 Moq 和接口进行单元测试

在使用 xunit 和 .net core 3.1 进行单元测试时获取记录器

使用 XUnit 和 AspNetCore.TestHost 测试 .net core web api 控制器文件上传

如何使用 spring boot 和 mockito 对控制器方法进行单元测试

如何使用 Moq 对 WEB API 控制器异常进行单元测试

使用 moq 对 Web API 控制器 actualResult 进行单元测试的行为与预期不符

使用 xUnit 和 Moq 在 .NET 5 中对 FluentEmail 进行单元测试

使所有 EF Core 模型属性虚拟化,以便在使用 Moq 和 xUnit 的单元测试中进行模拟?