Spring Cloud 通過使用REST文檔生成Contracts

2024-01-02 16:48 更新

您還可以使用Spring REST Docs生成Spring Cloud Contract DSL文件和文檔。如果與Spring Cloud WireMock結(jié)合使用,則會(huì)同時(shí)獲得合同和存根。

您為什么要使用此功能?社區(qū)中的一些人詢問有關(guān)他們希望轉(zhuǎn)向基于DSL的合同定義的情況的問題,但是他們已經(jīng)進(jìn)行了許多Spring MVC測(cè)試。使用此功能,您可以生成合同文件,以后可以修改合同文件并將其移動(dòng)到文件夾(在配置中定義),以便插件找到它們。

您可能想知道為什么WireMock模塊中有此功能。之所以具有此功能是因?yàn)樯珊贤痛娓际怯幸饬x的。

考慮以下測(cè)試:

		this.mockMvc
				.perform(post("/foo").accept(MediaType.APPLICATION_PDF)
						.accept(MediaType.APPLICATION_JSON)
						.contentType(MediaType.APPLICATION_JSON)
						.content("{\"foo\": 23, \"bar\" : \"baz\" }"))
				.andExpect(status().isOk()).andExpect(content().string("bar"))
				// first WireMock
				.andDo(WireMockRestDocs.verify().jsonPath("$[?(@.foo >= 20)]")
						.jsonPath("$[?(@.bar in ['baz','bazz','bazzz'])]")
						.contentType(MediaType.valueOf("application/json")))
				// then Contract DSL documentation
				.andDo(document("index", SpringCloudContractRestDocs.dslContract()));

前面的測(cè)試將創(chuàng)建上一部分中介紹的存根,同時(shí)生成合同和文檔文件。

該合同稱為index.groovy,可能類似于以下示例:

import org.springframework.cloud.contract.spec.Contract

Contract.make {
    request {
        method 'POST'
        url '/foo'
        body('''
            {"foo": 23 }
        ''')
        headers {
            header('''Accept''', '''application/json''')
            header('''Content-Type''', '''application/json''')
        }
    }
    response {
        status OK()
        body('''
        bar
        ''')
        headers {
            header('''Content-Type''', '''application/json;charset=UTF-8''')
            header('''Content-Length''', '''3''')
        }
        testMatchers {
            jsonPath('$[?(@.foo >= 20)]', byType())
        }
    }
}

生成的文檔(在這種情況下為Asciidoc格式)包含格式化的合同。該文件的位置為index/dsl-contract.adoc。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)