Как смоделировать исходящее Socket-соединение? - PullRequest
10 голосов
/ 19 декабря 2011

В интеграционных тестах (JDK 6) я пытаюсь перехватить все исходящие соединения TCP и проверить их.Похоже, я должен использовать java.net.Socket#setSocketImplFactory() метод.В настоящее время работает нормально, но я не могу понять, как получить доступ к оригинальной фабрике, чтобы создать экземпляр класса SocketImpl, предоставляемого JDK.Мне это нужно в основном потому, что я хочу, чтобы некоторые соединения выходили свободно, без насмешек.Можете ли вы предложить некоторые руководства / руководящие принципы / инструкции по этой проблеме?

Ответы [ 3 ]

1 голос
/ 19 декабря 2011

Вместо того, чтобы издеваться над Сокетом, я бы создал сервис Сокетов для Сокета, с которым можно было бы общаться.Это может захватить все записанные данные и ответить любым способом, который вы пожелаете.Его можно запустить в том же тесте и, возможно, в том же потоке.

0 голосов
/ 19 декабря 2011

Глядя на исходный код класса Socket, оригинальной фабрики нет - конструкторы проверяют, является ли factory нулевым, и если это так, они просто присваивают impl как новый PlainSocketImpl().

0 голосов
/ 19 декабря 2011

Согласно javadoc, вы должны иметь возможность использовать SocketFactory # getDefault () , чтобы получить SocketFactory по умолчанию для вашей среды.

Кстати: вы также можете посмотреть на этоRFE / ошибка, которая объявляет, что SocketImplFactory в основном тупик: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4245730

...