Я пытаюсь создать модульный тест для. net Core 3 Web API с mstest.
Я также использую:
- Autofixture
- Moq
- AutoFixture.AutoMoq
Этот модульный тест должен возвращать ответ NotFound()
, когда пива не найдено.
private IFixture _fixture;
private BeerController _beerController;
private Mock<IBeerService> _mockBeerService;
[TestInitialize]
public void Initialize()
{
_fixture = new Fixture().Customize(new AutoMoqCustomization());
_mockBeerService = _fixture.Freeze<Mock<IBeerService>>();
_beerController = _fixture.Create<BeerController>();
}
[TestMethod]
public async Task WhenCallGetBeerWithoutMatchReturnNotFound404()
{
//Arrange
int beerId = _fixture.Create<int>();
_mockBeerService.Setup(x => x.GetBeer(It.IsAny<int>())).Returns((Task<Beer>)null);
//Act
var actionResult = await _beerController.Get(beerId);
//Assert
Assert.IsInstanceOfType(actionResult.Result, typeof(NotFoundResult));
}
Это функция Я пытаюсь проверить:
[HttpGet("{beerId:int}")]
public async Task<ActionResult<beer>> Get(int beerId)
{
try
{
var beer = await _beerService.Getbeer(beerId);
if (beer == null) return NotFound();
return Ok(beer);
}
catch (Exception)
{
return BadRequest();
}
}
Но я сталкиваюсь с Object reference not set to an instance of an object.
исключением в этой строке кода: var beer = await _biereService.Getbeer(beerId);
Это трассировка стека: at BeerProject.Controllers.BeerController.<Get>d__2.MoveNext() in F:\DevProjects\Repos\API_BeerProject\BeerProject\Controllers\BeerController.cs:line 29
Я проверил return Ok(beer)
с этим тестом:
[TestMethod]
public async Task WhenCallGetBeerWithMatchReturnOk200()
{
//Arrange
int beerId = _fixture.Create<int>();
var beer = _fixture.Create<Task<Beer>>();
_mockBeerService.Setup(x => x.GetBeer(It.IsAny<int>())).Returns(beer);
//Act
var actionResult = await _beerController.Get(beerId);
//Assert
Assert.IsInstanceOfType(actionResult.Result, typeof(OkObjectResult));
}
, и он работает нормально.
, поэтому я предполагаю, что ему не нравится .Returns((Task<Beer>)null)
в WhenCallGetBeerWithoutMatchReturnNotFound404()