我有一些消费者合同测试应该在离线模式下运行Jenkins,因为生产者和消费者API在服务器上使用相同的本地Maven存储库,如果他们试图下载生产者的存根,测试会崩溃因为他们已经在当地。但是在本地,它们应该被禁用或在在线模式下运行,因为生产者API非常稳定,接口很少改变。
我准备了一个解决方法,但可能有更好的方法。我的解决方案是:
1)配置使用workOffline = true
运行的消费者测试2)将此代码添加到测试类中,以便在未设置系统属性“runContractTests”时禁用合同测试:
@BeforeClass
public static void checkContractTestsAreEnabled() throws IOException {
boolean runContractTests = Boolean.parseBoolean(System.getProperty("runContractTests"));
assumeTrue(runContractTests);
}
3)在Jenkins上运行这样的测试:
mvn clean verify -DrunContractTests=true
有关更好方法的任何建议吗?
答案 0 :(得分:1)
您可以修改surefire以仅在特定配置文件中运行合同测试。您还可以使用类路径扫描从类路径中获取存根。您还可以在某些条件下启用/禁用插件(系统道具/ env道具/等)
答案 1 :(得分:1)
此解决方案更为标准。我添加了一个Maven配置文件,因此只有在使用“-P runContractTests”执行Maven命令时才会执行合同测试。
我已将后缀CT用于合同测试。除此之外,我还添加了项目其他类型测试的后缀,以便它们也被执行。在我的情况下* Spock集成测试的规范和单元测试的*。
<profiles>
<profile>
<id>runContractTests</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.20</version>
<configuration>
<includes>
<include>**/*CT.*</include>
<include>**/*Spec.*</include>
<include>**/*Test.*</include>
</includes>
</configuration>
</plugin>
</plugins>
</build>
</profile>
</profiles>