Результат интеграционных тестов продолжает возвращать код состояния 301 - PullRequest
0 голосов
/ 08 июля 2019

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

Я попытался изменить номер порта и включить / выключить SSL, но все равно появляется та же проблема.

UserAPITest:

[TestClass]
    public class UserAPITest
    {
        private readonly HttpClient _client;
        private readonly IConfiguration _configuration;

        public UserAPITest()
        {
            _client = TestsHelper.Client;
            _configuration = TestsHelper.Configurations;
        }

        [TestInitialize]
        public void TestInitialize()
        {
        }

        [TestMethod]
        [DataRow(nameof(HttpMethod.Post), "api/User/refreshToken")]
        public async Task Initiation_Authorized_ShouldReturnNewToken(string httpMethod, string url)
        {
            _client.DefaultRequestHeaders.Authorization = TestsHelper.GetTestUserBearerHeader();
            var request = new HttpRequestMessage(new HttpMethod(httpMethod), url);

            var response = await _client.SendAsync(request);

            Assert.IsNotNull(response.Content); // value during debug added below

            Assert.AreEqual(HttpStatusCode.OK,response.StatusCode); // test fails here

// check for token inside response
            // Assert.IsTrue(Regex.IsMatch(response.RequestMessage.Content.ToString(), "^[A-Za-z0-9-_=]+\\.[A-Za-z0-9-_=]+\\.?[A-Za-z0-9-_.+/=]*$"));
        }
    }

TestsHelper:


        private static HttpClient SetClient()
        {
            HttpClient client;
            var host = new WebHostBuilder()
                                    .UseEnvironment("Development")
                                    .UseStartup<Startup>()
                                    ;

            var server = new TestServer(host);

            client = new HttpClient {BaseAddress = new Uri(Configurations["Tests:ApiClientUrl"], UriKind.RelativeOrAbsolute)};

            return client;
        }

        public static string GetTestUserToken()
        {
            var token = "someToken"; // there is an actual token here but I have removed it

            return token;
        }
        public static AuthenticationHeaderValue GetTestUserBearerHeader()
        {
            var token = GetTestUserToken();
            var bearerToken = new AuthenticationHeaderValue("Bearer", token);

            return bearerToken;
        }

Ожидаемый результат: тест либо проходит (возвращает токен), либо не проходит (возвращает 401 неавторизованный)

Фактический результат: тест возвращает 301 источник был перемещен

значение ответа:

{StatusCode: 301, ReasonPhrase: 'Moved Permanently', Version: 1.1, Content: System.Net.Http.HttpConnection+HttpConnectionResponseContent, Headers:
{
  Cache-Control: no-cache
  Pragma: no-cache
  Proxy-Connection: close
  Connection: close
  Content-Type: text/html; charset=utf-8
  Content-Length: 668
}}

Ответы [ 2 ]

1 голос
/ 08 июля 2019

вам нужно изменить свой тестовый набор на

_client.DefaultRequestHeaders.Authorization = TestsHelper.GetTestUserBearerHeader();
var request = new HttpRequestMessage(new HttpMethod(httpMethod), url);

var response = await _client.SendAsync(request);
var content = await response.Content.ReadAsStringAsync();

Assert.IsNotNull(content);

Assert.AreEqual(HttpStatusCode.OK,response.StatusCode);

Обновление Проблема была как на TestServer, так и в клиенте

var server = new TestServer(Program.CreateWebHostBuilder(new string[] { }));
client = server.CreateClient();
client.BaseAddress = new Uri(Configurations["Tests:ApiClientUrl"]);
0 голосов
/ 08 июля 2019

при построении тестового http-клиента используйте это: server.CreateClient() вместо client = new HttpClient {BaseAddress = new Uri(Configurations["Tests:ApiClientUrl"], UriKind.RelativeOrAbsolute)};

Ваша работа не работает, потому что тестовый сервер, который вы создаете, фактически не предоставляет конечные точки на уровне http. Вы используете тестовый сервер и тестовый клиент для тестирования вашей интеграции webapi / http, в то время как тестирование приводит к короткому замыканию всего стека протоколов http в памяти.

https://andrewchaa.me.uk/programming/2019/03/01/unit-testing-with-ASP-NET-Core.html

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