Тесная связь кода с задачами сторонней реализации затрудняет модульное тестирование кода в отдельности.
Вместо этого инкапсулируйте стороннюю реализацию реализации в абстракцию, которая при необходимости может быть смоделирована при тестировании.
Например, создайте абстракцию сторонней зависимости, выставляя только то, что нужно вашему коду.
public interface ILMXProxyServer {
void DoSOmethingElse(...);
void DoSOmething(...);
//...
}
и включите это явным образом в зависимости через внедрение конструктора.
public class MyClass {
private readonly ILMXProxyServer lmxProxyServer;
public MyClass(ILMXProxyServer lmxProxyServer) {
this.lmxProxyServer = lmxProxyServer;
}
//...other code omitted for brevity
}
Методы остаются такими же, как они будут вызывать открытые члены абстракции.
Реализация времени выполнения обернет / инкапсулирует стороннюю зависимость
public class MyLMXProxyServerWrapper : ILMXProxyServer {
// LMXProxyServerClass is the library in which need a lot of installation
private readonly LMXProxyServerClass lmxProxyServer;
public void DoSOmething(Something xxxxxxx){
lmxProxyServer.DoSOmething(xxxxxxxx);
}
//...code omitted for brevity
}
С этим рефактором кодтеперь стало более гибким, чтобы иметь возможность имитировать / подделывать прокси-сервер при тестировании в отдельности с использованием выбранной вами моделируемой среды или путем развертывания собственных реализаций, специфичных для тестирования.