У меня проблема с настройкой возвращаемого значения в моем модульном тесте, из-за которой неожиданные данные возвращаются при втором выполнении.
Я тестирую созданную мной службу, и у меня есть следующий код для настройки вернуть данные из интерфейса, используемого в сервисе.
_dataService.Setup(x => x.GetJsonFromApi(It.IsAny<string>(), API_KEY, ENTITY_A))
.Returns(Task.FromResult(new List<Entity>() {
new Entity {
Forename = "first_name",
Surname = "last_name",
EntityType = ENTITY_A
}
}));
_dataService.Setup(x => x.GetJsonFromApi(It.IsAny<string>(), API_KEY, ENTITY_B))
.Returns(Task.FromResult(new List<Entity>() {
new Entity {
Forename = "first_name",
Surname = "last_name",
EntityType = ENTITY_B
}
}));
_dataService.Setup(x => x.GetJsonFromApi(It.IsAny<string>(), API_KEY, ENTITY_C))
.Returns(Task.FromResult(new List<Entity>() {
new Entity {
Forename = "first_name",
Surname = "last_name",
EntityType = ENTITY_C
}
}));
Вышеприведенное прекрасно работает при первом выполнении моего сервиса в модульном тесте, когда каждый вызов возвращает один объект. Код в сервисе:
var data = await _apiDataService.GetJsonFromApi(apiUrl, apiKey, ENTITY_A);
data.AddRange(await _apiDataService.GetJsonFromApi(apiUrl, apiKey, ENTITY_B));
data.AddRange(await _apiDataService.GetJsonFromApi(apiUrl, apiKey, ENTITY_C));
на втором исполнении; первый вызов (например, _apiDataService.GetJsonFromApi(apiUrl, apiKey, ENTITY_A))
возвращает список из трех объектов вместо ожидаемого. Я позволил отладчику продолжить выполнение следующих двух вызовов с data.AddRange (), и ожидаемый единственный объект возвращается из обоих этих на втором выполнении и добавили в список, чтобы я получил пять объектов.
Может кто-нибудь сказать мне, что я делаю неправильно, пожалуйста.
Некоторая дополнительная информация:
Код выполняется дважды в методе модульного теста следующим образом:
apiCheckerService.AddEntitiesHash(client.Id).GetAwaiter().GetResult();
apiCheckerService.AddEntitiesHash(client.Id).GetAwaiter().GetResult();
Все свойства, переданные методу GetJsonFromApi
, являются строками, а ENTITY_A, ENTITY_B и ENTITY_ C являются константами, поэтому при втором выполнении все параметры, передаваемые в функцию, должны быть точно такими же. Я тестирую другую часть службы, которая должна быть заблокирована при втором запуске, но для правильной работы теста она должна быть выполнена.