三分鐘快速上手
在生產者側
要開始使用 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 元素的子元素。 |
一旦實現和測試基礎類到位,測試將透過,並且應用程式和存根 artifact 都將被構建並安裝到本地 Maven 倉庫中。你現在可以合併更改,並可以在線上倉庫中釋出應用程式和存根 artifact。
在消費者側
你可以在整合測試中使用 Spring Cloud Contract Stub Runner
來獲得一個執行中的 WireMock 例項或訊息路由,以模擬實際服務。
為此,請新增 Spring Cloud Contract Stub Runner
的依賴,如下例所示:
你可以透過以下兩種方式之一將生產者側的存根安裝到你的 Maven 倉庫中:
-
透過簽出生產者側倉庫,並新增契約,然後執行以下命令生成存根:
$ cd local-http-server-repo $ ./mvnw clean install -DskipTests
測試被跳過,因為生產者側的契約實現尚未到位,因此自動生成的契約測試會失敗。 |
-
透過從遠端倉庫獲取已存在的生產者服務存根。為此,請將存根 artifact ID 和 artifact 倉庫 URL 作為
Spring Cloud Contract Stub Runner
的屬性傳遞,如下例所示:
現在,你可以用 @AutoConfigureStubRunner
註解你的測試類。在註解中,提供 group-id
和 artifact-id
值,以便 Spring Cloud Contract Stub Runner
為你執行協作者的存根,如下例所示:
@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 響應或訊息的存根版本。