Как использовать код ответа для запроса с использованием flurl - PullRequest
0 голосов
/ 07 февраля 2019

Я пытался добавить для своего запроса код ответа, но мне трудно разобраться, не могли бы вы помочь мне в этом.Вот моя реализация и определение.

myTests.cs

var accessToken = await helper.SendRequestAsync<AccessToken>(baseUrl, body);

==> как установить здесь утверждение сразу после вышеприведенного оператора для проверки статуса ответа?

помощники.cs

public static async Task<T> SendRequestAsync<T>(string baseUrl, Dictionary<string, string> body)
{
    using (var flurl_client = new FlurlClient(baseurl))
    {
        try
        {
            var response = await flurl_client
                            .Request()
                            .PostUrlEncodedAsync(body)
                            .ReceiveJson<T>();
            return response;
        }
        catch (Exception ex)
        {
            Assert.Fail(ex.Message);
        }
        return default(T);
    }
}

=====================================================

Модель данных для "AccessToken" находится в Dto.cs

public class AccessToken
{
    public string token_type { get; set; }
    public string expires_in { get; set; }
    public string ext_expires_in { get; set; }
    public string expires_on { get; set; }
    public string not_before { get; set; }
    public string resource { get; set; }
    public string access_token { get; set; }
    public string refresh_token { get; set; }
    public object Status_Code { get; set; }
}

1 Ответ

0 голосов
/ 07 февраля 2019

Если вы ищете возможности тестирования Flurl , чтобы помочь с этим, я боюсь, что это не сработает.Эти функции специально разработаны для тестирования поведения вашего клиентского кода на основе поддельных ответов, которые вы настроили в своем тесте.Похоже, вы хотите установить код состояния из реального вызова.

Лучший способ, о котором я могу подумать, это сбросить строку .ReceiveJson<T>() в SendRequestAsync и изменить метод.подпись для возврата Task<HttpResponseMessage>:

using System.Net.Http;

public static async Task<HttpResponseMessage> SendRequestAsync(string baseUrl, Dictionary<string, string> body)
{
    using (var flurl_client = new FlurlClient(baseurl))
    {
        try
        {
            var response = await flurl_client
                .Request()
                .PostUrlEncodedAsync(body); // this returns Task<HttpResponseMessage>

            return response;
        }
        catch (Exception ex)
        {
            Assert.Fail(ex.Message);
        }
        return null;
    }
}

Тогда ваш тест может сделать это:

var resp = await Helper.SendRequestAsync(...);
Assert.AreEqual(HttpStatusCode.OK, resp.StatusCode);

Все, что нуждается в десериализованном теле ответа, может сделать это:

var token = await Helper.SendRequestAsync(...).ReceiveJson<AccessToken>();
...