三秒鐘速覽

這篇簡短的教程介紹了 Spring Cloud Contract 的使用。它包含以下主題:

你可以在這裡找到一個稍長一點的教程。

下面的 UML 圖顯示了 Spring Cloud Contract 中各部分的關係:

getting-started-three-second

在生產者端

要開始使用 Spring Cloud Contract,你可以將用 Groovy DSL 或 YAML 表示的 REST 或訊息契約檔案新增到 `contracts` 目錄中,該目錄由 `contractsDslDir` 屬性設定。預設情況下,它是 `$rootDir/src/test/resources/contracts`。

然後,你可以將 Spring Cloud Contract Verifier 依賴項和外掛新增到你的構建檔案中,如下面的示例所示:

以下清單顯示瞭如何新增外掛,它應該放在檔案的 build/plugins 部分:

<plugin>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-contract-maven-plugin</artifactId>
	<version>${spring-cloud-contract.version}</version>
	<extensions>true</extensions>
</plugin>

執行 `./mvnw clean install` 會自動生成測試,以驗證應用程式是否符合新增的契約。預設情況下,測試會在 `org.springframework.cloud.contract.verifier.tests.` 下生成。

由於契約所描述的功能尚未實現,因此測試會失敗。

為了使它們透過,你必須新增正確的 HTTP 請求處理或訊息處理實現。此外,你必須為自動生成的測試向專案新增一個基礎測試類。所有自動生成的測試都將擴充套件這個類,並且它應該包含執行它們所需的所有設定資訊(例如 `RestAssuredMockMvc` 控制器設定或訊息測試設定)。

下面的示例來自 `pom.xml`,展示瞭如何指定基礎測試類:

<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-contract-maven-plugin</artifactId>
                <version>2.1.2.RELEASE</version>
                <extensions>true</extensions>
                <configuration>
                    <baseClassForTests>com.example.contractTest.BaseTestClass</baseClassForTests> (1)
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
1 `baseClassForTests` 元素允許你指定你的基礎測試類。它必須是 `spring-cloud-contract-maven-plugin` 中 `configuration` 元素的子元素。

一旦實現和測試基礎類就緒,測試就會透過,並且應用程式和存根工件都會構建並安裝到本地 Maven 倉庫中。你現在可以合併更改,並且可以將應用程式和存根工件釋出到線上倉庫中。

在消費者端

你可以在整合測試中使用 `Spring Cloud Contract Stub Runner` 來獲取一個執行中的 WireMock 例項或訊息路由,以模擬實際服務。

為此,請新增對 `Spring Cloud Contract Stub Runner` 的依賴,如下面的示例所示:

你可以透過以下兩種方式將生產者端存根安裝到你的 Maven 倉庫中:

  • 透過檢出生產者端倉庫並新增契約,然後執行以下命令生成存根:

    $ cd local-http-server-repo
    $ ./mvnw clean install -DskipTests
測試被跳過,因為生產者端契約實現尚未就緒,所以自動生成的契約測試會失敗。
  • 透過從遠端倉庫獲取已有的生產者服務存根。為此,將存根工件 ID 和工件倉庫 URL 作為 `Spring Cloud Contract Stub Runner` 屬性傳遞,如下面的示例所示:

現在你可以使用 `@AutoConfigureStubRunner` 註解你的測試類。在註解中,為 `Spring Cloud Contract Stub Runner` 提供 `group-id` 和 `artifact-id` 值,以便它為你執行協作者的存根,如下面的示例所示:

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment=WebEnvironment.NONE)
@AutoConfigureStubRunner(ids = {"com.example:http-server-dsl:+:stubs:6565"},
		stubsMode = StubRunnerProperties.StubsMode.LOCAL)
public class LoanApplicationServiceTests {
	. . .
}
當從線上倉庫下載存根時,使用 `REMOTE` `stubsMode`;對於離線工作,則使用 `LOCAL`。

現在,在你的整合測試中,你可以接收協作者服務預期發出的 HTTP 響應或訊息的存根版本。

© . This site is unofficial and not affiliated with VMware.