JUnit5迁移Pact消费者测试:@DefaultRequestValues替代方案问询
Pact JUnit4 @DefaultRequestValues 迁移至 JUnit5 的等效方案
pact-jvm-consumer-junit5没有提供和JUnit4中@DefaultRequestValues完全对应的注解,推荐两种替代方案,根据你的测试需求选择:
1. 提取通用请求配置方法复用
这是最直接的替代方式,把原@DefaultRequestValues注解里的逻辑抽成公共方法,在每个@Pact定义里调用即可:
// 抽离通用默认请求配置逻辑 private def applyDefaultRequest(request: PactDslRequestWithoutPath): PactDslRequestWithoutPath = { request .method("POST") .headers( HttpHeaders.CONTENT_TYPE, APPLICATION_JSON.getMimeType, HttpHeaders.AUTHORIZATION, s"$TokenType $ValidToken" ) } // 在@Pact方法中调用该方法 @Pact(provider = "your-provider", consumer = "your-consumer") def samplePact(builder: PactDslWithProvider): RequestResponsePact = { builder .given("a valid user state") .uponReceiving("a sample API request") .`match`(applyDefaultRequest(new PactDslRequestWithoutPath)) .willRespondWith() .status(200) .body("""{"result": "success"}""") .toPact() }
2. 实现PactTestCustomizer做全局默认配置
如果需要让默认请求规则全局生效(和原注解的全局作用类似),可以实现PactTestCustomizer接口,在测试类中定义全局默认请求属性:
import au.com.dius.pact.consumer.junit5.PactConsumerTestExt import au.com.dius.pact.consumer.junit5.PactTestCustomizer import au.com.dius.pact.core.model.RequestResponsePact import au.com.dius.pact.core.model.annotations.Pact import org.junit.jupiter.api.extension.ExtendWith @ExtendWith(PactConsumerTestExt::class) class YourConsumerTest : PactTestCustomizer { override fun customize(builder: PactDslWithProvider) { // 设置全局默认请求方法和头信息 builder.defaultRequestMethod = "POST" builder.defaultRequestHeaders = mapOf( HttpHeaders.CONTENT_TYPE to APPLICATION_JSON.getMimeType, HttpHeaders.AUTHORIZATION to s"$TokenType $ValidToken" ) } @Pact(provider = "your-provider", consumer = "your-consumer") def samplePact(builder: PactDslWithProvider): RequestResponsePact = { builder .given("a valid user state") .uponReceiving("a sample API request") // 无需重复设置默认属性,全局配置会自动生效 .willRespondWith() .status(200) .body("""{"result": "success"}""") .toPact() } }
如果某个测试需要覆盖全局默认值,直接在对应的uponReceiving块中重新设置即可,局部配置会优先于全局默认值。
内容的提问来源于stack exchange,提问作者Lesiak
相关产品推荐
相关产品推荐

