Apenas para que outras pessoas que configuraram seus aplicativos como o meu se beneficiem do que eu passei ...
Nenhuma das soluções acima funcionou para mim porque tenho um ./configdiretório logo abaixo da base do meu projeto com 2 arquivos:
application.properties
application-dev.properties
Em application.propertieseu tenho:
spring.profiles.active = dev # set my default profile to 'dev'
Em application-dev.propertieseu tenho:
server_host = localhost
server_port = 8080
Isto é, quando eu executo meu jar de gordura a partir da CLI, os *.propertiesarquivos serão lidos do ./configdiretório e está tudo bem.
Bem, acontece que esses arquivos de propriedades substituem completamente a webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORTconfiguração @SpringBootTestem minhas especificações de Spock. Não importa o que eu tentei, mesmo com webEnvironmentdefinido como RANDOM_PORTSpring, sempre inicializaria o contêiner Tomcat integrado na porta 8080 (ou qualquer valor que eu definisse em meus ./config/*.propertiesarquivos).
A ÚNICA maneira de superar isso foi adicionando um texto explícito properties = "server_port=0"à @SpringBootTestanotação em minhas especificações de integração do Spock:
@SpringBootTest (webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, properties = "server_port=0")
Então, e só então, o Spring finalmente começou a girar o Tomcat em uma porta aleatória. IMHO, este é um bug do framework de testes do Spring, mas tenho certeza que eles terão suas próprias opiniões sobre isso.
Espero que isso tenha ajudado alguém.