Выполнение интеграционного теста XUnit, в котором используются параметры приложения из Visual Studio и из Azure DevOps.

avatar
Adam
8 августа 2021 в 16:25
277
1
0

У меня есть проект Integration Test .NET 5 XUnit. Я использую XUnit 2.4 и XUnit.Runner.VisualStudio 2.4. Для интеграционных тестов в этом проекте требуется одно значение конфигурации — ApiUrl. Я хочу запустить интеграционные тесты двумя способами:

  1. Из Visual Studio с использованием All Test Run или ReSharper
  2. Из конвейера Azure DevOps и передать ApiUrl из конвейера переменные, которые переопределяют переменные из настроек проекта

Мои вопросы:

  • Как выполнить настройку таким образом, чтобы мой тестовый код получал доступ к ApiUrl прозрачным способом (ему все равно, откуда он запускается)?
  • Как передать переменную ApiUrl в мой тестовый проект интеграции, я использую тестовую задачу DotNetCoreCLI@2 в качестве шага конвейера.
Источник

Ответы (1)

avatar
Métoule
10 августа 2021 в 07:21
0

В задачу можно добавить переменные окружения через env:, которые затем можно прочитать в коде:

- task: DotNetCoreCLI@2
  inputs:
    command: test
    projects: "tests/**/*Tests.csproj"
  env:
    ApiUrl: $(PipelineVariable)

В вашем коде C#:

var apiUrl = Environment.GetEnvironmentVariable("ApiUrl") ?? "http://example.com";
Adam
10 августа 2021 в 10:49
0

Спасибо, это отвечает на часть вопроса. Я не хочу получать доступ к переменным из среды на локальном компьютере, я хочу получить к ним доступ через appsettings.json

Métoule
10 августа 2021 в 12:22
0

Установка ApiUrl в переменных среды задачи заставит это значение иметь приоритет над значением, поступающим из appsettings.json, потому что по умолчанию построитель конфигурации настроен через configBuilder.AddJsonFile('appsettings.json).AddEnvironmentVariables()

Adam
10 августа 2021 в 12:33
0

Итак, почему вы обращаетесь к переменной явно через Environment.GetEnvironmentVariable, а не через IOption или IConfigurationRoot["ApiUrl"]?

Métoule
10 августа 2021 в 12:45
0

Я думал, что вам нужно получить доступ к этой переменной только в XUnit, а не в самом приложении. Извини за это!