У меня есть интерфейс, каквызовов несколько классов с тем же интерфейсом
public interface IAddressProvider
{
string GetAddress(double lat, double long);
}
В моем классе, потребляющего я хочу, чтобы перебрать конкретных поставщиков, пока не получите результат, как (упрощенный):
string address;
address = _cachedAddressProvider.GetAddress(lat, long);
if(address == null)
address = _localDbAddressProvider.GetAddress(lat, long);
if(address = null)
address = _externalAddressProvider.GetAddress(lat, long);
return address ?? "no address found";
Затем я могу издеваться над каждым провайдером для модульного тестирования, устанавливая значение null как возвращаемое значение для надлежащего тестирования всех кодов кода.
Как бы вставить интерфейс в мой потребительский класс (желательно с помощью StructureMap), чтобы каждая конкретная реализация была правильно решена?
Мне нравится этот подход, но как я теперь издеваюсь над моими конкретными провайдерами, чтобы проверить, что AddressProviderProxy вызывает кеш первым, локальный db, если кеш равен null и т. Д.? – friedX
Добавьте тест для него с несколькими издевательствами. Вы можете протестировать логику каждого провайдера отдельно, включая прокси. Логика прокси-сервера заключается в том, что он дает адрес первого провайдера, который дает адрес, поэтому добавьте единичный тест, где первый провайдер дает адрес, добавляет единичный тест, где второй поставщик дает адрес, добавляет единичный тест, где несколько провайдеров предоставляют адрес и т. д. Вам не следует проверять комбинацию ваших фактических провайдеров с прокси-сервером. – Maarten