每个环境的Spring合同测试的不同设置

时间:2018-01-25 16:46:55

标签: java spring spring-cloud-contract

我有一些消费者合同测试应该在离线模式下运行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

有关更好方法的任何建议吗?

2 个答案:

答案 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>