2016-08-02 2 views
0

Дать модульный тест ударить контроллер код для контроллера:Как проверить, является ли HttpResponseMessage ErrorResponse?

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 и полностью игнорирует обход ошибки? Если это так, мне нужно будет найти способ вытащить исключение.

Edit:

мне интересно, если есть способ различать CreateResponse и CreateErrorResponse, а не глядя на код ошибки, потому что в некоторых случаях я хочу приложить исключение, а в некоторых случаях это не «ошибка» как таковая.

В противном случае я мог бы просто сделать Request.CreateResponse(HttpStatusCode.InternalServerError);

Однако, возможно, нет никакой разницы?

+0

На нем должно быть свойство IsSuccess, нет? –

+0

Есть, но я предполагаю, что в некоторых ситуациях не будет исключения? Например, 404 не гарантирует исключения или ошибки. – NibblyPig

+0

Ну, это зависит от того, что такое исключительные обстоятельства и что вы включаете в них. Вы либо устанавливаете '200', либо' 500', поэтому не просто утверждаете, что они существуют. Вы действительно заботитесь об исключении, которое будет указано в вашем тесте. Я ожидаю, что вы не дадите возможность исключить 500 исключений для клиентского приложения (браузера или приложения). Они предназначены только для внутреннего использования, поэтому я ожидаю, что какое-то промежуточное программное обеспечение вытащит их и не даст сообщений. (это то, что я делаю) –

ответ

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

Это проверит, если это ошибка 2xx.

Assert.IsTrue(response.IsSuccessStatusCode); 

Это будет проверяться более универсально, если произошел сбой.

1

Существует 2 подхода.

Во-первых, вы можете проверить, начинается ли код состояния с «2», он будет выглядеть примерно так.

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

Второй подход заключается в использовании свойства IsSuccessStatusCode ответа и проверки на это.

!response.IsSuccessStatusCode 
Смежные вопросы