如何使用状态代码 500 和消息对 IHttpActionResult 异常 InternalServerError 进行单元测试
[HttpGet]
public async Task<IHttpActionResult> Get(Guid myId)
{
try
{
var myaccount = await _myaccountService.GetMyAccount(myId);
return Ok(myaccount);
}
catch (Exception ex)
{
return InternalServerError();
}
}
尝试过测试方法
[TestMethod]
public async Task GeMyAccount_WhenThrowsException_ReturnsServerError()
{
// Arrange
var exception = new Exception("Internal Server Error");
var expectedResult = new List<MyAccount>
{
new MyAccount
{
Id = "1",
Name = "Name1"
},
new MyAccount
{
Id = "2",
Name = "Name2"
},
};
var myId = new Guid();
//Act
var mockMyAccountService = new Mock<IMyAccountService>();
mockMyAccountService.Setup(mock =>
mock.GetMyAccount(myId)).Throws(exception).Verifiable();
var controller = new MyAccountController(mockMyAccountService.Object);
//Assert
var actualResult = (await controller.Get(myId) as
OkNegotiatedContentResult<MyAccount>).Content;
?? var result = actualResult as ObjectResult;
?? Assert.AreEqual(StatusCodes.Status500InternalServerError, result.StatusCode);
?? Assert.AreEqual("Internal Server Error ", result.Value);
mockMyAccountService.Verify(b => b.GetMyAccount(myId));
}
不确定如何使用 Moq 获取异常和状态代码 500。
正如 Nkosi 所说,异常被 try-catch 块吞下,因此您无法对异常做出任何断言。
但是您可以(并且应该)对返回的对象进行断言。
[TestMethod]
public async Task GivenAFaultyMyAccountService_WhenICallGet_ThenItReturnsAnInternalServerError()
{
//Arrange
var expectedException = new Exception("Something went wrong");
var mockMyAccountService = new Mock<IMyAccountService>();
mockMyAccountService
.Setup(svc => svc.GetMyAccount(It.IsAny<Guid>()))
.Throws(expectedException);
var sut = new MyAccountController(mockMyAccountService.Object);
//Act
var actualResult = await sut.Get(Guid.NewGuid());
//Assert
Assert.IsInstanceOfType(actualResult, typeof(InternalServerErrorResult));
}
我对您的测试进行了以下更改:
Setup
通过将myId
参数替换为It.IsAny<Guid>()
new Guid()
toGuid.NewGuid()
因为前者会创建一个空的 uuid,而后者会生成一个新的 uuidVerifiable
电话,因为这里并不真正需要它controller
为sut
,它代表被测系统InternalServerError
返回一个InternalServerErrorResultAssert
类有一个方法IsInstanceOf,这使得该类型检查更方便本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句