这可能是一个相当简单的问题,但我承认,我卡住了。单元测试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