У меня есть класс, который является чем-то вроде этого (очень упрощенное, но это общая идея, я действительно не используется необработанный типа сокета.):Dependency Injection для модульного тестирования в сравнении класса управления своим собственных переменных
class ConnectionBroker {
private Socket socket;
public ConnectionBroker(ConnectionDetails details) {
socket = new Socket(details)
//set socket paramaters
}
public sendOverConnection(String message) {
//processing of message and internal queuing based on priority
socket.send(message);
}
public shutdown() {
socket.close();
}
}
Было бы полезно, если бы я мог тестировать функции класса, издеваясь над переменной сокета, чтобы проверить, что отправляется через сокет. Стандартный способ сделать это, что я видел, модифицирует конструктор быть
public ConnectionBroker(Socket socket) {
this.socket = socket;
}
Это позволит сделать блок тестирования намного проще, однако у меня есть ряд вопросов с делать это таким образом:
- розетка должна быть maanged только
ConnectionBroker
класса - Тот факт, что
ConnectionBroker
класс использует сокеты на все должны быть отведенной от класса вызывающего - Если сокет должен быть принят в то вызывающий код мог бы модифицировать атрибуты в гнезде, которые класс
ConnectionBroker
не знает
Каков правильный способ решения этого вопроса? Я что-то неправильно думаю?
непубличный 'ConnectionBroker (гнездо сокета)'? – ZhongYu