Мне нужна помощь в написании пользовательских методов Assertion для тестирования API - PullRequest
0 голосов
/ 12 февраля 2020

Итак, два утверждения, которые я делаю, это проверка сообщения о состоянии, которое должно дать мне «ОК», и я проверяю, возвращает ли API 200. Но моя проблема, конечно, в том, что каждый запрос отличается от этой переменной ответа. Я пытаюсь избежать написания одних и тех же трех строк утверждений и просто вызываю один простой способ c

HttpWebResponse response = (HttpWebResponse)sd.GetDataType();
Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);
statusNumber = (int)response.StatusCode;
Assert.AreEqual(200, statusNumber);

Ответы [ 3 ]

0 голосов
/ 12 февраля 2020

Протокол HTTP отправляет только следующие байты: «200 OK»

Ваш код выполняет 2 действия:

  • Утверждение, что ответ на запрос "" 200 OK ".

  • Утверждение, что код library работает, поскольку перечисление StatusCode получает правильное значение.

Возможно, вы захотите избежать этого, мы надеемся, что MS предоставит вам покрытие (а также LOC, которые делают это)

Чтобы не повторять этот код, создайте один метод и используйте его, вы можете попробовать:

Я бы сделал первый подход, но если вы новичок в программировании, вы можете попробовать последний вариант, который, вероятно, будет легче понять.

EDIT

Посмотрев немного на ссылку HttpResponseMessage , я бы использовал свойство IsSuccessStatusCode:

Assert.IsTrue(response.IsSuccessStatusCode)

И все. Но это проверит, находится ли ответ в диапазоне успеха (200-299), поэтому, возможно, вам нужно дополнительно проверить код, тогда один из первоначально предложенных методов может пригодиться.

Разговор дешевый, покажи мне код:

public static bool IsOk(this HttpWebResponse response) {
    var isOk = response.IsSuccessStatusCode;
    isOk = isOk && response.StatusCode == 200;
    return isOk;
}

с помощью этого метода на static class в namespace used на class, вы можете go с:

Assert.IsTrue(response.IsOk());

этот код был написан прямо здесь, он может не работать как есть, но, я надеюсь, вы поняли идею.

0 голосов
/ 12 февраля 2020

Я бы сделал вспомогательный класс для его проверки:

public static class HttpWebResponseDebug
{
    public static void Assert(HttpWebResponse response)
    {
        Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);
        statusNumber = (int)response.StatusCode;
        Assert.AreEqual(200, statusNumber);        
    }
}

var response = (HttpWebResponse)sd.GetDataType();
HttpWebResponseDebug.Assert(response);
// do your thing..
0 голосов
/ 12 февраля 2020

Все методы assert - stati c, поэтому вы можете создать свой собственный метод stati c и использовать Assert внутри

public static class AssertExtensions
{
    public static void Assert(YourType sd)
    {
        HttpWebResponse response = (HttpWebResponse)sd.GetDataType();
        Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);
        statusNumber = (int)response.StatusCode;
        Assert.AreEqual(200, statusNumber);
    }
}

, а затем использовать AssertExtensions.Assert(response)

btw, если вы используете. Net Ядро уже есть метод response.EnsureSuccessStatusCode(), который выдает исключение

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...