Вы можете определить интерфейс хранилища и в реализации этого хранилища использовать WebClient. Тогда ваш контроллер будет работать с хранилищем, и, поскольку он является интерфейсом, его легко смоделировать. Теперь вы скажете, что это просто делегирование проблемы модульного тестирования реализации репозитория, который сейчас использует WebClient и который не является надёжным. Ответ на этот вопрос заключается в том, что это больше не модульное тестирование, а, откровенно говоря, тестирование такого метода:
public string FetchData(string url)
{
using (var client = new WebClient())
{
return client.DownloadString(url);
}
}
не имеет особого смысла, так как вы сейчас тестируете класс WebClient, который, я надеюсь, уже был сделан его авторами в Редмонде.