Итак, я пытаюсь запустить фиктивный сервер S3 для своих модульных тестов.
Мой компонент для фиктивного сервера S3 выглядит примерно так:
@Bean
public AmazonS3 mockServer(){
var mockServer = new S3Builder()...withPort(8001).build();
mockServer.start();
return mockServer;
}
Проблема в том, что когда Springтесты используют другой контекст, он пытается создать новый экземпляр этого bean-компонента для нового контекста, который завершается неудачно при привязке сокета, поскольку ранее он запускал этот фиктивный сервер в другом тестовом контексте.
Я решил этовыдайте номер, назначив порт с помощью SocketUtils.findAvailableTcpPort()
. Однако я хотел бы знать, есть ли более элегантное решение, чтобы каким-то образом убедиться, что только один экземпляр этого бина является общим для тестовых контекстов.
Или иметь какой-то перехват, когда Spring запускается / останавливается, используя контекст для отсоединения прослушивающего порта?