单元测试IHttpActionResult控制器 - 测试200 OK失败

时间:2016-03-27 06:40:34

标签: c# unit-testing

这可能是一个相当简单的问题,但我承认,我被困住了。

我有一个返回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并[d> f__AnonymousType11 [DataAccess.BO.Person]]

这到底发生了什么?从控制器返回的是HTTP 200 Ok响应。为什么期待OkNegotiatedContentResult

1 个答案:

答案 0 :(得分:3)

根据Asp.Net文档,IHttpActionResult的结果为OkNegotiatedContentResult。你的Assert比较应该检查一下。

Unit Testing Controllers in Asp.Net

  

操作返回200(确定)并带有响应正文

     

如果找到产品,则Get方法调用Ok(product)。在单位   测试,确保返回类型是OkNegotiatedContentResult和   退回的产品具有正确的ID。