我有一個看起來像這樣的ApiController方法...單元測試ApiController方法和狀態碼不HttpStatusCode枚舉
[HttpPost]
public IHttpActionResult Post([FromBody] GloballyEnumeratedMessage gem)
{
var result = _gemPublisher.PublishGem(gem);
if (result.Success)
{
return Ok();
}
return new StatusCodeResult((HttpStatusCode)422, this);
}
我的測試,用於檢查好結果如下。
[TestMethod]
public void Post_ValidGem_Returns200()
{
_gemPublisherMock.Setup(v => v.PublishGem(It.IsAny<GloballyEnumeratedMessage>())).Returns(ResultStatus.FromSuccess());
var controller = new PublishGemController(_gemPublisherMock.Object);
// Act
IHttpActionResult actionResult = controller.Post(It.IsAny<GloballyEnumeratedMessage>());
// Assert
Assert.IsInstanceOfType(actionResult, typeof(OkResult));
}
我返回422之前,我是返回一個錯誤請求和測試是這樣的:
[TestMethod]
public void Post_InvalidGem_Returns400()
{
_gemPublisherMock.Setup(v => v.PublishGem(It.IsAny<GloballyEnumeratedMessage>())).Returns(ResultStatus.FromFailure());
var controller = new PublishGemController(_gemPublisherMock.Object);
// Act
IHttpActionResult actionResult = controller.Post(It.IsAny<GloballyEnumeratedMessage>());
// Assert
Assert.IsInstanceOfType(actionResult, typeof(BadRequestResult));
}
我想保留錯誤請求另一個潛在的故障,從而決定改變郵政法如果發佈失敗,則返回422。我的測試將檢查422狀態碼是什麼樣的?
編輯:解決了基於關閉的問題
[TestMethod]
public void Post_InvalidGem_Returns422()
{
_gemPublisherMock.Setup(v => v.PublishGem(It.IsAny<GloballyEnumeratedMessage>())).Returns(ResultStatus.FromFailure());
var controller = new PublishGemController(_gemPublisherMock.Object);
// Act
IHttpActionResult actionResult = controller.Post(It.IsAny<GloballyEnumeratedMessage>());
var result = (StatusCodeResult) actionResult;
// Assert
Assert.IsInstanceOfType(actionResult, typeof(StatusCodeResult));
Assert.AreEqual(422, (int)result.StatusCode);
}
你不能驗證結果是否是一個'StatusCodeResult'並且它包含狀態422? –
謝謝,我該怎麼做?例如: 'var contentResult = actionResult as StatusCodeResult; Assert.AreEqual(422,(int)contentResult.StatusCode);'? – Robodude
提交這個解決方案,我會標記它解決。 – Robodude