Пакт-тестирование с использованием случайного порта с jUnit5 и SpringBoot - PullRequest
0 голосов
/ 20 декабря 2018

Я не могу заставить тесты pact провайдера работать на любом другом порту, кроме 8080, при использовании jUnit5.У меня есть следующий код:

@ExtendWith(SpringExtension.class)
@Provider(PROVIDER)
@PactFolder("pacts")
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
public class PactProviderTest {

  @LocalServerPort private int serverPort;

  @Autowired Result<IServiceManagementFacade2> serviceManagementFacade;

  @Autowired private RestServiceFactory restServiceFactory;

  @TestTemplate
  @ExtendWith(PactVerificationInvocationContextProvider.class)
  void pactVerificationTestTemplate(PactVerificationContext context) {
    context.setTarget(new HttpTestTarget("localhost", serverPort));
    context.verifyInteraction();
  }

Когда я запускаю это, я получаю следующую ошибку:

Request Failed - Connect to localhost:8080 [localhost/127.0.0.1, localhost/0:0:0:0:0:0:0:1] failed: Connection refused (Connection refused)

Если я изменяю

@ SpringBootTest (webEnvironment= WebEnvironment.RANDOM_PORT)

до

@ SpringBootTest (webEnvironment = WebEnvironment.DEFINED_PORT)

тесты пройдены.Но тогда никакое другое приложение не может быть запущено на этом порту во время тестов, что недопустимо в тестовой среде.Любые идеи, как я могу решить это?

1 Ответ

0 голосов
/ 20 декабря 2018

Мне удалось решить это.

Перемещение строки:

context.setTarget (new HttpTestTarget ("localhost", serverPort));

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

Так что-то вроде этого:

  @LocalServerPort private int serverPort;
  private HttpTestTarget target = new HttpTestTarget("localhost", serverPort);

  @TestTemplate
  @ExtendWith(PactVerificationInvocationContextProvider.class)
  void pactVerificationTestTemplate(PactVerificationContext context) {
    context.verifyInteraction();
  }

  @BeforeEach
  void setTarget(PactVerificationContext context) {
    context.setTarget(target);
  }

не работает.

Это, однако, работает:

  @LocalServerPort private int serverPort;

  @TestTemplate
  @ExtendWith(PactVerificationInvocationContextProvider.class)
  void pactVerificationTestTemplate(PactVerificationContext context) {
    context.verifyInteraction();
  }

  @BeforeEach
  void setTarget(PactVerificationContext context) {
    context.setTarget(new HttpTestTarget("localhost", serverPort));
  }
...