0

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

作为一种解决方法,我评估了手动将存根 jar 解压到映射文件中并使用 WireMockClassRule 启动验证的可能性,因为它在此链接中完成

是否有其他简单的方法可以重用 AutoConfigureStubRunner 为我完成这项工作,并且仍然不需要向 Spring Boot 添加依赖项?

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

4

1 回答 1

0

假设需要在客户端使用一个存根 jar。其他事物中的存根有一个 json,其中包含您的合约提供的用于执行集成测试的数据。这个 json 有一种格式,wiremock 使用它来发布一个类似于我们真实后端的端点。所以需要采取以下步骤:

从 repo 下载存根 jar 到您的本地机器并将其复制到 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 调用

于 2017-10-02T14:05:57.493 回答