【问题标题】:Pact testing using random port with jUnit5 and SpringBoot使用带有 jUnit 5 和 Spring Boot 的随机端口进行 Pact 测试
【发布时间】:2019-05-21 02:57:11
【问题描述】:

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

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

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

【问题讨论】:

    标签: spring-boot testing junit5 pact


    【解决方案1】:

    我设法解决了。

    移动线:

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

    【讨论】:

    • 我遵循相同但得到状态不匹配错误预期状态为 201 但为 404
    【解决方案2】:
    猜你喜欢
    • 2020-02-20
    • 2019-02-19
    • 2016-12-15
    • 2020-03-20
    • 1970-01-01
    • 2021-03-13
    • 2018-05-25
    • 1970-01-01
    • 2023-03-26
    相关资源
    最近更新 更多