【发布时间】:2020-08-14 13:04:24
【问题描述】:
我正在为我的控制器中的用户创建方法编写单元测试。
当我运行单元测试时,它会在行中返回 NullReferenceException
return ValidationProblem(); 在我的控制器方法中。
[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 ---
我的控制器方法
[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();
}
}
单元测试
[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);
}
【问题讨论】:
标签: c# asp.net-core moq xunit