W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
作為欺詐檢測服務(wù)器(貸款發(fā)放服務(wù)的服務(wù)器)的開發(fā)人員:
創(chuàng)建一個初始實現(xiàn)。
提醒一下,您可以在此處看到初始實現(xiàn):
@RequestMapping(value = "/fraudcheck", method = PUT) public FraudCheckResult fraudCheck(@RequestBody FraudCheck fraudCheck) { return new FraudCheckResult(FraudCheckStatus.OK, NO_REASON); }
接管請求請求。
$ git checkout -b contract-change-pr master $ git pull https://your-git-server.com/server-side-fork.git contract-change-pr
您必須添加自動生成的測試所需的依賴項:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-contract-verifier</artifactId> <scope>test</scope> </dependency>
在Maven插件的配置中,傳遞packageWithBaseClasses
屬性
<plugin> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-contract-maven-plugin</artifactId> <version>${spring-cloud-contract.version}</version> <extensions>true</extensions> <configuration> <packageWithBaseClasses>com.example.fraud</packageWithBaseClasses> <convertToYaml>true</convertToYaml> </configuration> </plugin>
本示例通過設(shè)置
packageWithBaseClasses
屬性使用“基于約定”的命名。這樣做意味著最后兩個軟件包組合在一起以成為基礎(chǔ)測試類的名稱。在我們的案例中,合同位于src/test/resources/contracts/fraud
下。由于從contracts
文件夾開始沒有兩個軟件包,因此僅選擇一個,應(yīng)該為fraud
。添加后綴Base
,并大寫fraud
。這將為您提供FraudBase
測試類名稱。
所有生成的測試都擴展了該類。在那邊,您可以設(shè)置Spring上下文或任何必需的內(nèi)容。在這種情況下,請使用Rest Assured MVC啟動服務(wù)器端FraudDetectionController
。
/* * Copyright 2013-2019 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.example.fraud; import io.restassured.module.mockmvc.RestAssuredMockMvc; import org.junit.Before; public class FraudBase { @Before public void setup() { RestAssuredMockMvc.standaloneSetup(new FraudDetectionController(), new FraudStatsController(stubbedStatsProvider())); } private StatsProvider stubbedStatsProvider() { return fraudType -> { switch (fraudType) { case DRUNKS: return 100; case ALL: return 200; } return 0; }; } public void assertThatRejectionReasonIsNull(Object rejectionReason) { assert rejectionReason == null; } }
現(xiàn)在,如果您運行./mvnw clean install
,則會得到以下內(nèi)容:
Results :
Tests in error:
ContractVerifierTest.validate_shouldMarkClientAsFraud:32 ? IllegalState Parsed...
發(fā)生此錯誤的原因是您有一個新合同,從中生成了一個測試,但由于未實現(xiàn)該功能而失敗了。自動生成的測試如下所示:
@Test public void validate_shouldMarkClientAsFraud() throws Exception { // given: MockMvcRequestSpecification request = given() .header("Content-Type", "application/vnd.fraud.v1+json") .body("{\"client.id\":\"1234567890\",\"loanAmount\":99999}"); // when: ResponseOptions response = given().spec(request) .put("/fraudcheck"); // then: assertThat(response.statusCode()).isEqualTo(200); assertThat(response.header("Content-Type")).matches("application/vnd.fraud.v1.json.*"); // and: DocumentContext parsedJson = JsonPath.parse(response.getBody().asString()); assertThatJson(parsedJson).field("['fraudCheckStatus']").matches("[A-Z]{5}"); assertThatJson(parsedJson).field("['rejection.reason']").isEqualTo("Amount too high"); }
如果您使用了Groovy DSL,則可以看到value(consumer(…?), producer(…?))
塊中存在的合同的所有producer()
部分都已注入到測試中。如果使用YAML,則同樣適用于response
的matchers
部分。
請注意,在生產(chǎn)者方面,您也在執(zhí)行TDD。期望以測試的形式表達。此測試使用合同中定義的URL,標頭和正文向我們自己的應(yīng)用程序發(fā)送請求。它還期望響應(yīng)中精確定義的值。換句話說,您擁有red
,green
和refactor
的red
部分。現(xiàn)在是將red
轉(zhuǎn)換為green
的時候了。
編寫缺少的實現(xiàn)。
因為您知道預(yù)期的輸入和預(yù)期的輸出,所以可以編寫缺少的實現(xiàn):
@RequestMapping(value = "/fraudcheck", method = PUT) public FraudCheckResult fraudCheck(@RequestBody FraudCheck fraudCheck) { if (amountGreaterThanThreshold(fraudCheck)) { return new FraudCheckResult(FraudCheckStatus.FRAUD, AMOUNT_TOO_HIGH); } return new FraudCheckResult(FraudCheckStatus.OK, NO_REASON); }
再次執(zhí)行./mvnw clean install
時,測試通過。由于Spring Cloud
Contract Verifier
插件將測試添加到generated-test-sources
中,因此您實際上可以從IDE中運行這些測試。
部署您的應(yīng)用程序。
完成工作后,即可部署更改。首先,合并分支:
$ git checkout master $ git merge --no-ff contract-change-pr $ git push origin master
您的CI可能會運行類似./mvnw clean deploy
之類的東西,它將同時發(fā)布應(yīng)用程序和存根工件。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: