c# xUnit Moq It.IsAny <object>не дразнит, как ожидалось - PullRequest
0 голосов
/ 18 февраля 2020

Ниже приведен фрагмент кода (простой 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, он работает. Но это не совсем правильно, поскольку модульные тесты предназначены для работы на разных машинах, и базовый путь для каждого из них будет разным.

1 Ответ

0 голосов
/ 18 февраля 2020

File.ReadAllTextAsync() возвращает строку, поэтому ваша настройка MOQ должна иметь It.IsAny<string>() в качестве второго параметра вместо It.IsAny<object>().

...