Вы должны предоставить зависимости класса для класса посредством внедрения зависимости (конструктор, свойство, параметр). Это делает ваш класс тестируемым и позволяет имитировать все эти зависимости.
UPDATE:
Введите сервисный прокси:
class Foo
{
private IServiceProxy _serviceProxy;
public Foo(IServiceProxy _serviceProxy)
{
_serviceProxy = serviceProxy;
}
public void Bar()
{
var staff = _serviceProxy.GetStaff();
}
}
Кстати, попробуйте скрыть информацию о прокси от вашего класса. Например. реализовать через прокси-интерфейс тот же интерфейс, который есть у реальной службы, и предоставить IService вашему классу.
ОБНОВЛЕНИЕ 2 (шлюз):
Все наши доменные нужды - набрать персонал. Итак, мы определяем интерфейс:
interface IStaffService
{
Staff GetStaff();
}
Наш класс домена (ваш протестированный класс использует только этот интерфейс и не зависит от веб-сервисов, создания прокси и других проблем инфраструктуры).
Далее создайте шлюз (см. Определение на сайте Мартина Фаулера) для вашей услуги:
public MyServiceProxyGateway : IStaffService
{
public Staff GetStaff()
{
var proxy = new YourProxyType();
proxy.X = value;
proxy.Y = value;
var response = proxy.CallActualServiceMethod();
Staff staff = new Staff();
staff.Value = response.Something;
return staff;
}
}
Ваш код теперь совершенно не знает обо всей этой инфраструктуре связи. И вы используете удобный интерфейс GetStaff вместо CallActualServiceMethod.