Spring 启动 junit5 + 应用程序属性中的配置的提供者测试与契约代理的集成
Provider test integration with pact broker for Spring Boot junit5 + configuration in application properties
pact-jvm-provider-spring 声明对于 junit5 提供程序测试,不需要使用 spring 库。
但是,@PactBroker 注释取决于系统属性。有没有一种方法可以通过 Spring 属性 解析器使它适用于应用程序属性。我尝试创建类似于 SpringEnvironmentResolver.kt 的内容并在上下文设置中使用它。但这没有用。
@Provider("api-provider-app")
@PactBroker
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@ActiveProfiles("test")
public class PactVerificationTest {
@LocalServerPort
private int port;
@Autowired
private Environment environment;
@TestTemplate
@ExtendWith(PactVerificationInvocationContextProvider.class)
void testTemplate(Pact pact, Interaction interaction, HttpRequest request,
PactVerificationContext context) {
context.setTarget(new HttpTestTarget("localhost", port));
context.setValueResolver(new SpringResolver(environment));
context.verifyInteraction();
}
}
我得到以下 错误
Invalid pact broker host specified ('${pactbroker.host:}'). Please provide a valid host or specify the system property 'pactbroker.host'.
更新
经过更多搜索后发现 setTarget 不起作用,需要将其移至 @BeforeEach 方法。
@BeforeEach
void setContext(PactVerificationContext context) {
context.setValueResolver(new SpringResolver(environment));
context.setTarget(new HttpTestTarget("localhost", port));
}
以下代码片段帮助它与@PactFolder 注释一起工作。但是带有属性的@PactBroker 仍然无法正常工作
Pact-JVM 添加了一个新模块,它扩展了 JUnit5 支持以允许在 Spring 上下文中配置值。参见 https://github.com/DiUS/pact-jvm/tree/master/provider/pact-jvm-provider-junit5-spring。它将与下一个版本的 Pact-JVM 一起发布,即 4.0.7.
pact-jvm-provider-spring 声明对于 junit5 提供程序测试,不需要使用 spring 库。
但是,@PactBroker 注释取决于系统属性。有没有一种方法可以通过 Spring 属性 解析器使它适用于应用程序属性。我尝试创建类似于 SpringEnvironmentResolver.kt 的内容并在上下文设置中使用它。但这没有用。
@Provider("api-provider-app")
@PactBroker
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@ActiveProfiles("test")
public class PactVerificationTest {
@LocalServerPort
private int port;
@Autowired
private Environment environment;
@TestTemplate
@ExtendWith(PactVerificationInvocationContextProvider.class)
void testTemplate(Pact pact, Interaction interaction, HttpRequest request,
PactVerificationContext context) {
context.setTarget(new HttpTestTarget("localhost", port));
context.setValueResolver(new SpringResolver(environment));
context.verifyInteraction();
}
}
我得到以下 错误
Invalid pact broker host specified ('${pactbroker.host:}'). Please provide a valid host or specify the system property 'pactbroker.host'.
更新 经过更多搜索后发现 setTarget 不起作用,需要将其移至 @BeforeEach 方法。
@BeforeEach
void setContext(PactVerificationContext context) {
context.setValueResolver(new SpringResolver(environment));
context.setTarget(new HttpTestTarget("localhost", port));
}
以下代码片段帮助它与@PactFolder 注释一起工作。但是带有属性的@PactBroker 仍然无法正常工作
Pact-JVM 添加了一个新模块,它扩展了 JUnit5 支持以允许在 Spring 上下文中配置值。参见 https://github.com/DiUS/pact-jvm/tree/master/provider/pact-jvm-provider-junit5-spring。它将与下一个版本的 Pact-JVM 一起发布,即 4.0.7.