Spring boot 使用jUnit5和SpringBoot的随机端口进行Pact测试

Spring boot 使用jUnit5和SpringBoot的随机端口进行Pact测试,spring-boot,testing,junit5,pact,Spring Boot,Testing,Junit5,Pact,当使用jUnit5时,我无法在8080以外的任何端口上运行pact提供程序测试。我有以下代码: @ExtendWith(SpringExtension.class) @Provider(PROVIDER) @PactFolder("pacts") @SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT) public class PactProviderTest { @LocalServerPort private int s

当使用jUnit5时,我无法在8080以外的任何端口上运行pact提供程序测试。我有以下代码:

@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();
  }
如果我改变

@SpringBootTest(webEnvironment=webEnvironment.RANDOM\u端口)

@SpringBootTest(webEnvironment=webEnvironment.DEFINED\u端口)

测试通过了。但是,在测试期间,不能在该端口上运行在测试环境中不可接受的其他应用程序。有什么办法可以解决这个问题吗?

我设法解决了

移动线路:

setTarget(新的HttpTestTarget(“localhost”,serverPort))

在每个人都解决了问题之前。它不起作用的原因是我之前尝试过这样做,因为我使用了一个变量来设置它

这样做:

  @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));
  }
我设法解决了它

移动线路:

setTarget(新的HttpTestTarget(“localhost”,serverPort))

在每个人都解决了问题之前。它不起作用的原因是我之前尝试过这样做,因为我使用了一个变量来设置它

这样做:

  @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));
  }

我遵循相同但获取状态不匹配错误预期状态为201但为404我遵循相同但获取状态不匹配错误预期状态为201但为404