Как смоделировать Socket с SocketTImeoutException для теста JUnit? - PullRequest
0 голосов
/ 23 марта 2020

У меня есть сервис, который подключается к сокету. Я хочу создать интеграционный тест, который тестирует java.net.SocketTimeoutException.

. Поскольку не нужно издеваться над деталями, я просто хочу запустить локальный сервер сокетов во время теста junit и отправить запросы на этот локальный сервер. socket.

@BeforeClass
public void beforeClass(){
    ServerSocket serverSocket = new ServerSocket(12345, 0, InetAddress.getByName(null));

    new Runnable() {
        @Override
        public void run() {
            try {
                serverSocket.accept();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }.run();
}

@Test
public void testSocket() {
    myservice.send();
} 

Проблема: код выше блокирует, когда я подключаюсь к этому тестовому сокету. Как я могу здесь симулировать SocketTimeoutException, а не блокировать выполнение теста?

1 Ответ

1 голос
/ 24 марта 2020

Я бы решил это следующим образом (при использовании spring-integration для сокетного соединения):

@MockBean
private AbstractClientConnectionFactory fac;

given(fac.getConnection()).willThrow(new UncheckedIOException(new SocketTimeoutException("test")));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...