我有一個 .NET Core API Framework 6.0,我正在使用 NUnit Framework 撰寫測驗異步控制器方法我得到控制器身份驗證方法回傳的空值。當我從 Postman 打類似的電話時,會有回應。我認為我的起訂量丟失了一些東西,但我遵循了檔案但無法找出問題所在。
//User Controller
private readonly IUserService _userService;
public UserController(IUserService userService)
{
_userService = userService;
}
[AllowAnonymous]
[HttpPost("authenticate")]
public async Task<IActionResult> Authenticate([FromBody] UserRequest userRequest)
{
try
{
var response = await _userService.Authenticate(userRequest); //Authenticate method is not being called, response is NULL here
return Ok(new ApiResponse<UserResponse>().Success(response));
}
catch (Exception ex)
{
return betServerError(ex);
}
}
Authenticate 方法如下,第 1 行的斷點沒有被命中。
public async Task<UserResponse> Authenticate(UserRequest userRequest)
{
var user = _context.Users.Where(x => x.Email == userRequest.Email).FirstOrDefault(); //Breakpoint here is not being hit
bool valid = false;
if (user == null)
throw new HttpException(HttpStatusCode.Unauthorized, "Username or password incorrect");
//Other code ......
return new UserResponse
{
Id = user.Id,
Email = user.Email,
Token = tokenString
};
}
UserTest.cs 如下所示:
Mock<IUserService> UserServiceMock = new Mock<IUserService>();
[SetUp]
public void Setup()
{
}
[Test]
public async Task should_Login()
{
//Arrange
var user = new UserResponse
{
Id = 1,
Email = "[email protected]",
Token = "TEST_TOKEN"
};
UserServiceMock.Setup(x => x.Authenticate(new UserRequest { Email = "[email protected]", Password = "password" }))
.Returns(Task.Run(() => user));
var UserController = new UserController(UserServiceMock.Object);
//Act
var result = await UserController.Authenticate(new UserRequest { Email = "[email protected]", Password = "password1" }); //result here doesnot contain the response I expect, it has a null object
//Assert
Assert.IsNotNull(result);
Assert.AreEqual(HttpStatusCode.OK, GetHttpStatusCode(result));
}
uj5u.com熱心網友回復:
UserRequest您傳入的Authenticate實體與您設定模擬所期望的實體不同。因此,由于輸入不匹配,因此不會執行模擬,并且默認模擬行為會接管。
洗掉模擬條件(即使用It.IsAny<UserRequest>()),或將相同的實體傳遞給模擬和控制器方法。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/439505.html
上一篇:如何使用CallByName或Invoke與Async/Await
下一篇:如何替換字串中的所有無效字符?
