我正在为执行删除操作的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控制器的单元测试返回错误的状态代码
发布评论