如何测试HttpResponseMessage是否为ErrorResponse?

时间:2016-08-02 14:13:25

标签: c# asp.net-web-api

编写单元测试以命中控制器,控制器的代码为:

public HttpResponseMessage InsertByKittyId(.....
    ...
    if (result.Success)
        return Request.CreateResponse(HttpStatusCode.OK);
    else
        return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, new Exception(result.Message));

在我的单元测试中,它应该使用代码生成错误响应:

var response = kittenController.InsertByKittenId(123);

Assert that response is an Error Response ?
var exceptionResult = (Error Response)response; ?
Assert.AreEqual("Bad Kitty", exceptionResult.Exception.Message);

有没有办法用?写两行,或者我应该检查响应代码是不是2xx而是完全忽略错误方面?如果是这样,我将需要找到一种方法来解决异常。

编辑:

我想知道是否有办法区分CreateResponse和CreateErrorResponse而不是查看错误代码,因为在某些情况下我想附加一个异常,在某些情况下它本身并不是'错误'。 / p>

否则我可以Request.CreateResponse(HttpStatusCode.InternalServerError);

但也许没有区别?

2 个答案:

答案 0 :(得分:1)

有两种方法。

首先,您可以检查状态代码是否以“2”开头,它看起来像这样。

response.StatusCode.ToString().StartsWith("2");

第二种方法是使用响应的IsSuccessStatusCode属性并检查它。

!response.IsSuccessStatusCode

答案 1 :(得分:0)

Assert.IsTrue(response.StatusCode.ToString()[0] == '2');

那将检查是否是2xx错误。

Assert.IsTrue(response.IsSuccessStatusCode);

如果发生故障,那将更加一般地检查。

相关问题