У меня есть тест Spring Boot, который использует Wiremock для имитации внешней службы. Чтобы избежать конфликтов с параллельными сборками, я не хочу устанавливать фиксированный номер порта для wiremock и хотел бы полагаться на его динамическую конфигурацию порта.
Приложение использует свойство (external.baseUrl
), установленное в application.yml (в src / test / resources). Однако я не нашел способа программно отменить это. Я пробовал что-то вроде этого:
WireMockServer wireMockServer = new WireMockServer();
wireMockServer.start();
WireMock mockClient = new WireMock("localhost", wireMockServer.port());
System.setProperty("external.baseUrl", "http://localhost:" + wireMockServer.port());
но это не сработало, и вместо этого использовалось значение из application.yml. Все другие решения, которые я рассмотрел, переопределяют свойство статическим значением (например, в некоторой аннотации), но я не знаю значение порта Wiremock до тех пор, пока не будет запущен тест.
Уточнение:
И Spring Boot, и Wiremock запускаются на случайных портах. Это нормально, и я знаю, как получить значение обоих портов. Однако предполагается, что wiremock имитирует внешнюю службу, и мне нужно указать своему приложению, как до нее добраться. Я делаю это с помощью свойства external.baseUrl
. Значение, которое я хочу установить в своем тесте, конечно же, зависит от номера порта коммутации. Моя проблема заключается просто в том, как программно установить свойство в тесте весенней загрузки.