Ниже приведен фрагмент кода (простой HTTP-пост-вызов), который я пытаюсь смоделировать в Azure Функция:
await httpClient.PostAsync("https://url.com", await File.ReadAllTextAsync(Path.Combine(Environment.GetEnvironmentVariable("APP_DIRECTORY"), "file.json"));
Обратите внимание, что функция httpClient.PostAsyn c () занимает два Аргументы: URL-адрес как строка, а тело как объект.
Теперь в моем тесте я высмеиваю этот вызов POST следующим образом:
httpClientMock.Setup(s => s.PostAsync(It.IsAny<string>(), It.IsAny<object>())).ReturnsAsync(mockedHttpResponse);
Я ожидал, что await File.ReadAllTextAsync(Path.Combine(Environment.GetEnvironmentVariable("APP_DIRECTORY"), "file.json")
не будет называется, как я настроил его для работы с любым объектом. Однако мой тестовый пример завершается неудачно с этим исключением:
Обнаружено исключение System.ArgumentNullException с сообщением «Значение не может быть пустым. (Параметр 'path1')" в System.IO.Path.Combine (String path1, String path2)
Когда я задаю правильный путь (даже фиктивный путь не работает), установив переменную Environment в Test, он работает. Но это не совсем правильно, поскольку модульные тесты предназначены для работы на разных машинах, и базовый путь для каждого из них будет разным.