Azure Функциональное тестирование модулей с помощью функции FunctionStartup - PullRequest
0 голосов
/ 13 февраля 2020

Я пишу проект модульного теста для функций azure, который использует класс Startup, наследующий FunctionStartUp. В этом классе запуска я загружаю все свои зависимости и конфигурацию с загрузкой переменных Enviornment.

Проблема заключается в том, что при запуске метода модульного теста я получаю значения переменных Enviornment как нулевые (поскольку класс запуска не был вызван, следовательно, переменные Enviornment не установлены).

Может кто-нибудь подсказать, как загрузить переменные окружения, которые установлены в local.Setting. json и appsetting. json file?

Ответы [ 2 ]

0 голосов
/ 27 марта 2020

Чтобы добавить информацию поверх ответа Криса. Вы можете сослаться на этот пост Как получить переменную окружения в Xunit Test

Мне кажется, довольно приятно реализовать это. Вам просто нужно создать другой класс, который будет использоваться всеми остальными классами. В Xunit они называли это Fixture. См. Ссылку Общий контекст между тестами

. В этом классе я прочитаю свой конфигурационный файл из моего целевого проекта тестирования и задаю переменные среды. См. Ссылку Как получить переменную среды в Xunit Test

Пример кода

public class SharedDataFixture: IDisposable
{
    public SharedDataFixture()
    {
        using (var file = File.OpenText("D:\\TargetProject\\local.settings.json"))
        {
            var reader = new JsonTextReader(file);
            var jObject = JObject.Load(reader);

            var variables = jObject.GetValue("Values").ToString();
            var keyValuePairs = JsonConvert.DeserializeObject<Dictionary<string, string>>(variables);


            foreach (var pair in keyValuePairs)
            {
                Environment.SetEnvironmentVariable(pair.Key, pair.Value);
            }
        }

        string keyVaultName = System.Environment.GetEnvironmentVariable("AZURE_KEY_VAULT");

        //Retrieving my json values using environment variable set
        azureLoginInfo = new AzureLoginInfo(keyVaultName);

        // ... other data
    }

    public void Dispose()
    {
        // ... clean up test data from the database ...
    }

    public AzureLoginInfo azureLoginInfo  { get; private set; }
}

Мой класс тестирования Xunit (я немного изменил его, чтобы приспособить его к своему использованию):

public class CreateAzureResourcesTests : IClassFixture<SharedDataFixture>
{
    AzureLoginInfo azureLoginInfo;

    public CreateAzureResourcesTests (SharedDataFixture fixture)
    {
        this.fixture = fixture;
    }

    // ... write test ...
}
0 голосов
/ 14 февраля 2020

В вашем коде модульного теста вы должны установить переменные, используя Environment.SetEnvironmentVariable("key", "value");

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