Ok Result 的单元测试测试
Unit testing test for Ok Result
我有以下(简化的)控制器:
public async Task<IHttpActionResult> Profile(UpdateProfileModelAllowNulls modelNullable)
{
ServiceResult<ProfileModelDto> result = await _profileService.UpdateProfile(1);
return Ok(result);
}
并且:
public async Task<ServiceResult<ProfileModelDto>> UpdateProfile(ApplicationUserDto user, UpdateProfileModel profile)
{
//Do something...
}
和以下 NUnit 测试:
[Test]
public async Task Post_Profile()
{
var result = _controller.Profile(new UpdateProfileModelAllowNulls() { Email = "testEmail@tt.co.uk", DisplayName = "TestDisplay"}) as OkNegotiatedContentResult<Task<<ProfileModelDto>>;
Assert.IsNotNull(result);
}
在我的 NUnit 测试中,我尝试使用本教程检查结果是否正常 https://www.asp.net/web-api/overview/testing-and-debugging/unit-testing-with-aspnet-web-api。
我的问题是我无法转换为 OkNegotiatedContentResult
,我假设是因为我没有传入正确的对象,但我看不到应该传入的对象。据我所知,我传递了正确的对象,例如:OkNegotiatedContentResult<Task<<ProfileModelDto>>;
但这不起作用。
我也试过:
var result = _controller.Profile(new UpdateProfileModelAllowNulls() { Email = "testEmail@tt.co.uk", DisplayName = "TestDisplay"}) as OkNegotiatedContentResult<Task<IHttpActionResult>>;
但这也不行。
有人能帮忙吗?
你的控制器是异步的,所以你应该这样称呼它:
var result = (_controller.Profile(new UpdateProfileModelAllowNulls() { Email = "testEmail@tt.co.uk", DisplayName = "TestDisplay"}).GetAwaiter().GetResult()) as OkNegotiatedContentResult<ProfileModelDto>;
正如@esiprogrammer 所述,该方法是异步的,因此我需要添加等待程序。
我能够通过执行以下操作修复它:
var result = _controller.Profile(new UpdateProfileModelAllowNulls() { Email = "testEmail@wwasoc.co.uk", DisplayName = "TestDisplay"});
var okResult = await result as OkNegotiatedContentResult<ServiceResult<ProfileModelDto>>;
我已经接受了@esiprogrammer 的回答,因为他正确地回答了问题,而且在我之前
我有以下(简化的)控制器:
public async Task<IHttpActionResult> Profile(UpdateProfileModelAllowNulls modelNullable)
{
ServiceResult<ProfileModelDto> result = await _profileService.UpdateProfile(1);
return Ok(result);
}
并且:
public async Task<ServiceResult<ProfileModelDto>> UpdateProfile(ApplicationUserDto user, UpdateProfileModel profile)
{
//Do something...
}
和以下 NUnit 测试:
[Test]
public async Task Post_Profile()
{
var result = _controller.Profile(new UpdateProfileModelAllowNulls() { Email = "testEmail@tt.co.uk", DisplayName = "TestDisplay"}) as OkNegotiatedContentResult<Task<<ProfileModelDto>>;
Assert.IsNotNull(result);
}
在我的 NUnit 测试中,我尝试使用本教程检查结果是否正常 https://www.asp.net/web-api/overview/testing-and-debugging/unit-testing-with-aspnet-web-api。
我的问题是我无法转换为 OkNegotiatedContentResult
,我假设是因为我没有传入正确的对象,但我看不到应该传入的对象。据我所知,我传递了正确的对象,例如:OkNegotiatedContentResult<Task<<ProfileModelDto>>;
但这不起作用。
我也试过:
var result = _controller.Profile(new UpdateProfileModelAllowNulls() { Email = "testEmail@tt.co.uk", DisplayName = "TestDisplay"}) as OkNegotiatedContentResult<Task<IHttpActionResult>>;
但这也不行。
有人能帮忙吗?
你的控制器是异步的,所以你应该这样称呼它:
var result = (_controller.Profile(new UpdateProfileModelAllowNulls() { Email = "testEmail@tt.co.uk", DisplayName = "TestDisplay"}).GetAwaiter().GetResult()) as OkNegotiatedContentResult<ProfileModelDto>;
正如@esiprogrammer 所述,该方法是异步的,因此我需要添加等待程序。
我能够通过执行以下操作修复它:
var result = _controller.Profile(new UpdateProfileModelAllowNulls() { Email = "testEmail@wwasoc.co.uk", DisplayName = "TestDisplay"});
var okResult = await result as OkNegotiatedContentResult<ServiceResult<ProfileModelDto>>;
我已经接受了@esiprogrammer 的回答,因为他正确地回答了问题,而且在我之前