Снова запустите интеграционный тест веб-API с использованием аутентификации Auth0 в ASP .Net Core 2.2.

У меня есть ASP .Net Core 2.2 Web API, который я сейчас создаю интеграционные тесты для использования XUnit. Однако API использует Auth0 в качестве сервера аутентификации. Все действия контроллера защищены декоратором [Authorize].

На данный момент я просто хотел добавить жестко закодированный токен доступа к тестам - который я могу получить с веб-сайта Auth0 - чтобы тесты могли успешно проходить аутентификацию по API и выполнять свою задачу. Я делаю то же самое все время с Почтальоном, чтобы проверить мой API, и он прекрасно работает.

Вот код, который у меня есть в одном тестовом классе:

public class FileControllerTests
{
    private readonly HttpClient _client;
    private readonly TestServer _server;

    public FileControllerTests()
    {
        _server = new TestServer(new WebHostBuilder().UseStartup<Startup>());
        _client = _server.CreateClient();
    }

    [Theory]
    [InlineData("GET")]
    public async Task TestFilesAsync(string method)
    {
        // Arrange
        var request = new HttpRequestMessage(new HttpMethod(method), "/api/files");
        request.Headers.Add("Authorization", ACCESS_TOKEN);

        // Act
        var response = await _client.SendAsync(request);

        // Assert
        response.EnsureSuccessStatusCode();
        Assert.Equal(HttpStatusCode.OK, response.StatusCode);
    }
}

Когда я запускаю этот тест, я получаю эту ошибку:

System.Net.Http.HttpRequestException: Код состояния ответа не указывает на успех: 500 (Внутренняя ошибка сервера).

Однако если я удаляю декоратор [Authorize] из контроллера API, то тест работает и проходит. Есть идеи?

Я использую Visual Studio Professional 2017 (версия 15.9.4)

РЕДАКТИРОВАТЬ: вместо:

request.Headers.Add("Authorization", ACCESS_TOKEN);

Я также пытался

request.Headers.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", ACCESS_TOKEN);

Но это не имело значения.

0 ответов

Другие вопросы по тегам