I'm writing unit test for user creation method in my controller.
When I run unit test it returns NullReferenceException in the line
return ValidationProblem();
in my controller method.
[xUnit.net 00:00:01.16] WotkTimeManager.Tests.UsersControllerTests.PostUsers_BadResult_WhenInvalidData [FAIL]
X WotkTimeManager.Tests.UsersControllerTests.PostUsers_BadResult_WhenInvalidData [285ms]
Error Message:
System.NullReferenceException : Object reference not set to an instance of an object.
Stack Trace:
at Microsoft.AspNetCore.Mvc.ControllerBase.ValidationProblem(String detail, String instance, Nullable`1 statusCode, String title, String type, ModelStateDictionary modelStateDictionary)
at Microsoft.AspNetCore.Mvc.ControllerBase.ValidationProblem(ModelStateDictionary modelStateDictionary)
at Microsoft.AspNetCore.Mvc.ControllerBase.ValidationProblem()
at WorkTimeManager.Controllers.UsersController.Post(UserCreateDto user) in /mnt/c/Users/kubw1/WorkTimeManagerSolution/src/WorkTimeManager/Controllers/UsersController.cs:line 72
at WotkTimeManager.Tests.UsersControllerTests.PostUsers_BadResult_WhenInvalidData() in /mnt/c/Users/kubw1/WorkTimeManagerSolution/test/WotkTimeManager.Tests/UsersControllerTests.cs:line 92
--- End of stack trace from previous location where exception was thrown ---
My controller method
[HttpPost]
public async Task<ActionResult<string>> Post(UserCreateDto user)
{
var userModel = _mapper.Map<User>(user);
var result = await _userManager.CreateAsync(userModel, user.password);
if (result.Succeeded)
{
return Ok();
}
else
{
foreach (var err in result.Errors)
{
ModelState.AddModelError(err.Code, err.Description);
}
return ValidationProblem();
}
}
Unit test
[Fact]
public async Task PostUsers_BadResult_WhenInvalidData()
{
var user = new UserCreateDto
{
username = "test",
password = "testp",
email = "email@wp.pl"
};
userManager
.Setup(x => x.CreateAsync(It.IsAny<User>(), It.IsAny<string>()))
.ReturnsAsync(IdentityResult.Failed(new IdentityError { Code = "Problem", Description = "Not working" })).Verifiable();
controller = new UsersController(new UnitOfWork(dbContext), userManager.Object, mapper);
var result = await controller.Post(user);
Assert.IsType<ValidationProblemDetails>(result.Result);
}