java - Junit5 上的 Pact 测试在 @ExtendWith 中定义什么
问题描述
我从 Pact 测试开始,我已经完成了消费者合同测试并生成了 JSON 协议文件。
我正在关注的示例有一个运行 Pact 文件的测试,这是我正在关注的示例代码,它包含提供者(bs)、消费者(客户端)和验证器(运行 Pact 文件)pact 示例
import au.com.dius.pact.provider.junit.PactRunner;
import au.com.dius.pact.provider.junit.Provider;
import au.com.dius.pact.provider.junit.State;
import au.com.dius.pact.provider.junit.loader.PactFolder;
import au.com.dius.pact.provider.junit.target.HttpTarget;
import au.com.dius.pact.provider.junit.target.Target;
import au.com.dius.pact.provider.junit.target.TestTarget;
import org.junit.runner.RunWith;
@RunWith(PactRunner.class)
@Provider("BusService")
@PactFolder("../pacts")
public class BusStopContractTest {
@State("There is a bus with number 613 arriving to Hammersmith bus station")
public void hammerSmith() {
System.out.println("There is a bus with number 613 arriving to Hammersmith bus station" );
}
@TestTarget
public final Target target = new HttpTarget(8111);
}
我也想做同样的事情,但是对于 Junit5,所以我需要使用@ExtendWith而不是@RunWith ,但是在ExtendWith()中必须定义什么?
@ExtendWith(PactRunner.class)不起作用,我也尝试过@ExtendWith(PactConsumerTestExt.class)也不起作用。
在我的 pom 中,我有:
<!-- Pact Provider-->
<dependency>
<groupId>au.com.dius</groupId>
<artifactId>pact-jvm-provider-junit_2.12</artifactId>
<version>3.5.24</version>
</dependency>
朱尼特木星
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<scope>test</scope>
</dependency>
有什么建议么?
解决方案
这PactRunner
是一个 JUnit 4 跑步者。相反,您需要使用 JUnit 5 扩展。
首先,您需要将 JUnit 5 扩展依赖项添加到您的pom.xml
. 例如:
<dependency>
<groupId>au.com.dius</groupId>
<artifactId>pact-jvm-provider-junit5_2.12</artifactId>
<version>3.5.24</version>
</dependency>
然后,您可以使用PactVerificationInvocationContextProvider
:
@ExtendWith(PactVerificationInvocationContextProvider.class)
@Provider("BusService")
@PactFolder("../pacts")
public class BusStopContractTest {
@State("There is a bus with number 613 arriving to Hammersmith bus station")
public void hammerSmith() {
System.out.println("There is a bus with number 613 arriving to Hammersmith bus station" );
}
// A @BeforeEach method with an injected PactVerificationContext replaces
// the old method annotated with @TestTarget
@BeforeEach
void setUpTarget(PactVerificationContext context) {
context.setTarget(new HttpTarget(8111));
}
}
推荐阅读
- android - 在多个 android 风格构建的情况下的 Bugsnag Sourcemap 路径
- macos - 无法在 Mac 上安装 php 扩展 'mysql_xdevapi'
- oracle-apex - Oracle APEX - 仅显示字段为粗体
- python - 如何在 Python 中循环我的倒数计时器?
- javascript - 如何将相册上传到 Firebase 存储?
- pandas - AttributeError:模块“missingno”没有属性“heatmap”
- excel - 使用 .formula 对另一个工作簿进行 vlookup
- java - CompletableFuture onTimeout 获取提供的值 java 异步编程
- python - 使用 pytest 测试数据是否匹配小数点后 4 位并使用它发布报告
- r - 点与轴文本的相对大小和缩放