It's been a whole day and I can't able to find a solution. My Controller's ActionMethod is working fine when it calls from PostMan. But when I call it from my Unit Test Method, it keeps returning null.
Here is my code.
I already found an answer on StackOverflow:
https://stackoverflow.com/a/56498657/11425180
But this is not resolving my issue.
Here is my ActionMethod
[HttpPost("register")]
public async Task<IActionResult> RegisterUser([FromBody] CreateUserRequest request)
{
if (!ModelState.IsValid)
return BadRequest(ModelState);
try
{
// Map request with dto and give to service
CreateUserRequestDto createDto = _mapper.Map<CreateUserRequestDto>(request);
CreateUserResponseDto response = await _userService.CreateUser(createDto);
if (response.IsSuccess)
{
Success success = new Success(message: SuccessMessages.UserCreated, data: response);
return Ok(success);
}
Error error = new Error(message: ErrorMessages.UserRegistrationFailed, description: response.Error.Description);
return BadRequest(error);
}
catch (Exception ex)
{
return HandleException(ex);
}
}
Here is my test Class
public class MockAccountControllerTests
{
readonly UserController _accountController;
public MockAccountControllerTests()
{
Mock<IMapper> _mockMapper = new Mock<IMapper>();
Mockers.InitializeMappers(_mockMapper);
UserManager<AppUser> _mockUserManager = Mockers.MockUserManager<AppUser>().Object;
UserRepository _mockUserRepository = new Mock<UserRepository>(_mockUserManager, _mockMapper.Object).Object;
UserService _mockUserService = new Mock<UserService>(_mockUserRepository).Object;
_accountController = new Mock<UserController>(_mockUserService, _mockMapper.Object).Object;
}
[Fact]
public async Task RegisterUser_NullUserNamePassword_ThrowsException()
{
CreateUserRequest request = RequestHelpers.CreateUserRequest(null, null);
IActionResult result = await _accountController.RegisterUser(request);
ObjectResult badRequest = result as ObjectResult;
Assert.NotNull(badRequest);
Assert.True(badRequest is BadRequestObjectResult);
Assert.Equal(StatusCodes.Status400BadRequest, badRequest.StatusCode);
Assert.NotNull(badRequest.Value);
Assert.IsType<Error>(badRequest.Value);
}
}
At this line in my Test Method
var result = await _accountController.RegisterUser(request);
The result
is null
I also tried to assign a value of BadRequest
to a variable like this
var a = BadRequest("Test Message");
The a
is also null
in this case.
How this will be corrected? Am I doing something wrong in my ActionMethod or TestMethod? Kindly review.