ASP.NET Core 3.1中API控制器的单元测试返回错误的状态代码

编程入门 行业动态 更新时间:2024-10-23 23:24:09
本文介绍了ASP.NET Core 3.1中API控制器的单元测试返回错误的状态代码的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我正在为执行删除操作的API控制器编写单元测试.这是删除动作

I'm writing a unit test for an API Controller performing delete action. Here's the Delete Action

public IActionResult DeleteSubGenre(Guid subGenreId) { if (!_genreRepo.SubGenreExist(subGenreId)) { return NotFound(); } var genreObj = _genreRepo.SubGenre(subGenreId); if (!_genreRepo.DeleteSubGenre(genreObj)) { ModelState.AddModelError("", $"Something went wrong when deleting the record {genreObj.Name}"); return StatusCode(500, ModelState); } return NoContent(); }

此操作的单元测试写为

[Fact] public void DeleteSubGenre_Returns_NoContentResult() { // Arrange var subGenreRepositoryMock = new Mock<ISubGenreRepository>(); var subGenreIMapperMock = new MapperConfiguration(config => { config.AddProfile(new MovieMapper()); }); var subGenreMapper = subGenreIMapperMock.CreateMapper(); SubGenresController subGenreApiController = new SubGenresController(subGenreRepositoryMock.Object, mapper: subGenreMapper); var subGenreDto = new SubGenreDTO() { Name = "Adult Content", DateCreated = DateTime.Parse("15 May 2015"), Id = Guid.NewGuid(), GenreId = Guid.NewGuid(), Genres = new GenreDTO() }; // Act var subGenreResult = subGenreApiController.DeleteSubGenre(subGenreDto.Id); var noContentResult = subGenreResult as NoContentResult; // Assert Assert.False(noContentResult.StatusCode is StatusCodes.Status204NoContent); }

在调试测试时,我注意到 subGenreResult 返回的状态码是404而不是204.我很高兴得到合理的解决方案.

While debugging the test i noticed that subGenreResult was returning a status code of 404 instead of 204. I can seem to get a hang over it. I'll be glad to get plausible solution to this.

推荐答案

您必须设置模拟程序以驱动测试用例的执行.

You have to setup your mock to drive the execution of your test case.

例如,如果要通过此行: if(!_genreRepo.SubGenreExist(subGenreId))

For example if you want to go through this line: if (!_genreRepo.SubGenreExist(subGenreId))

然后,您必须设置以下模拟行为:

then you have to setup the following mock behaviour:

subGenreRepositoryMock.Setup(repo => repo.SubGenreExist(It.IsAny<Guid>)).Returns(true);

要到达此行: return NoContent(); ,您可能还需要设置其他两种方法来驱动测试用例.

To reach this line: return NoContent(); you might need to setup the other two methods as well to drive your test case.

更多推荐

ASP.NET Core 3.1中API控制器的单元测试返回错误的状态代码

本文发布于:2023-11-14 13:49:18,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1587387.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:控制器   单元测试   状态   错误   代码

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!