推荐的方法来验证Jersey应用程序中spring cloud合同的客户端部分

时间:2017-07-28 23:31:19

标签: jersey spring-cloud-contract

我在运行spring boot的服务器应用程序中编写了一个spring cloud合约。这部分正确地将存根生成到我的本地仓库中。现在我想从运行Spring 3.1和Jersey的客户端应用程序验证此合同。

作为一种解决方法,我评估了将存根jar手动解压缩到映射文件中的可能性,并使用WireMockClassRule启动验证,如this link中所做的那样

还有其他一些简单的方法可以重用AutoConfigureStubRunner为我做这项工作,还是不需要为Spring Boot添加依赖项吗?

编辑: 我已经能够使用maven dependency:unpack插件下载和解压缩存根jar,然后使用wiremock运行它们(类似于所做的here)。我仍然需要解决的唯一问题是如何动态选择存根最新版本。通过使用maven依赖插件,我总是需要提供工件版本。

1 个答案:

答案 0 :(得分:0)

让我们假设需要在客户端使用存根jar。其他东西中的存根包含一个json,其中包含您的合同提供的数据以进行集成测试。这个json有一个由wiremock用来发布类似于我们真实后端的端点的格式。因此需要采取以下步骤:

将存根jar从repo下载到本地计算机并将其复制到wiremock内部文件夹

<plugin>
 <groupId>org.apache.maven.plugins</groupId>
 <artifactId>maven-dependency-plugin</artifactId>
 <version>3.0.1</version>
 <executions>
  <execution>
   <phase>generate-test-resources</phase>
   <goals>
    <goal>unpack</goal>
   </goals>
   <configuration>
    <artifactItems>
     <artifactItem>
      <groupId>com.yourbackend.contract</groupId>
      <artifactId>contract-service</artifactId>
      <version>LATEST</version>
      <type>jar</type>
      <classifier>stubs</classifier>
     </artifactItem>
    </artifactItems>
    <overWriteReleases>true</overWriteReleases>
    <overWriteSnapshots>true</overWriteSnapshots>
    <excludeTransitive>true</excludeTransitive>
    <includes>META-INF/**/mappings/**</includes>
    <outputDirectory>${basedir}/target/mappings</outputDirectory>
   </configuration>
  </execution>
 </executions>
</plugin>

请注意,LATEST设置为存根的版本,以确保始终检索最后一个存根jar。

在localhost中启动wiremock服务器

<dependency>
    <groupId>com.github.tomakehurst</groupId>
    <artifactId>wiremock</artifactId>
    <scope>test</scope>
</dependency>

然后在测试中

@ClassRule
WireMockClassRule wireMockRule = new WireMockClassRule(port);

您已设置,在测试中进行http调用