這可能是一個相當簡單的問題,但我承認,我卡住了。單元測試IHttpActionResult控制器 - 測試200 OK失敗
我有一個控制器返回IHttpActionResult
,我需要爲此編寫單元測試。
這裏的控制器:
public IHttpActionResult GetPerson(int id) {
Person person = repository.Get(id);
if (person == null) {
throw new HttpResponseException(HttpStatusCode.NotFound);
}
return Ok(new {
User = person
});
}
這裏的單元測試:
[TestMethod]
public void GetReturnsValidPerson() {
var userController = new UserController();
IHttpActionResult actionResult = userController.GetPerson(1);
Assert.IsInstanceOfType(actionResult, typeof(OkResult));
}
下面是從測試誤差:
Assert.IsInstanceOfType失敗。預計 類型:System.Web.Http.Results.OkResult實際類型: System.Web.Http.Results.OkNegotiatedContentResult1 [<> f__AnonymousType11 [DataAccess.BO.Person]
究竟是怎麼回事?從控制器返回的是HTTP 200 Ok響應。爲什麼期待OkNegotiatedContentResult
?
我在查詢之前檢查過文檔和很多博客,因爲它看起來很簡單。如果這不起作用呢? 'Assert.IsInstanceOfType(actionResult,typeof(OkNegotiatedContentResult));'?由於類型不匹配,我仍然失敗。 –
Patrick
您是否已將此行的返回類型IHttpActionResult actionResult = userController.GetPerson(1);設置爲'OkNegotiatedContentResult'?儘管這種類型的測試是多餘的。最好測試一下空返回和那個返回的對象 –
我做了,我必須投它並且投射失敗。 'System.InvalidCastException:無法強制類型爲'System.Web.Http.Results.OkNegotiatedContentResult'1 [<> f__AnonymousType1'1 [DataAccess.BO.Person]]的對象類型'System.Web.Http.Results.OkNegotiatedContentResult '1 [System.Web.Http.Results.OkResult]'。'我將行更改爲'var actionResult =(OkNegotiatedContentResult)userController.GetPerson(1);'。我想我只是測試對象的實際結果,而不是HTTP狀態代碼。對不起,如果這是愚蠢的,我是新來的這種測試與Web API。 –
Patrick