Gegeben dieser Eintrag in application.properties
:
was bewirkt, dass Spring Boot einen zufällig verfügbaren Port auswählt und eine Springboot-Webanwendung mit Hilfe von spock testet, wie kann der Spock-Code wissen, welcher Port getroffen werden soll?
Normale Injektion wie folgt:
%Vor%funktioniert nicht mit spock.
Sie können den Port mit diesem Code finden:
%Vor%Was für diejenigen, die am Java-Äquivalent interessiert sind, ist:
%Vor%Hier ist eine abstrakte Klasse, die Sie erweitern können, die diese Initialisierung der Spring-Boot-Anwendung beendet und den Port bestimmt:
%Vor%Was können Sie so verwenden:
%Vor% Die Injektion funktioniert mit Spock, solange Sie Ihre Klassenklasse korrekt konfiguriert haben und spock-spring
im Klassenpfad haben. Es gibt eine Einschränkung in Spock Spring , die dazu führt, dass Ihre Boot-Anwendung nicht bootstraped wird, wenn Sie Verwende @SpringApplicationConfiguration
. Sie müssen @ContextConfiguration
verwenden und stattdessen manuell konfigurieren. Siehe diese Antwort für Details.
Der zweite Teil des Problems besteht darin, dass Sie keinen GString für @Value
verwenden können. Sie könnten die $
umgehen, aber es ist einfacher, einfache Anführungszeichen zu verwenden:
Wenn Sie das zusammensetzen, erhalten Sie eine Spezifikation, die ungefähr so aussieht:
%Vor% Beachten Sie auch die Verwendung von @IntegrationTest("server.port=0")
, um einen zufälligen Port anzufordern. Es ist eine gute Alternative, es in application.properties
zu konfigurieren.
Tags und Links testing spock spring-boot port