Spring使用RestTemplate和Junit單元測試的注意事項(xiàng)
使用RestTemplate和Junit單元測試的注意事項(xiàng)
對于之前寫單元測試注入的的service,這樣單元測試也可以跑通。

springboot中的單元測試
但是如果現(xiàn)在送RestTemplate,代碼如下:

運(yùn)行單元測試會(huì)報(bào)如下錯(cuò)誤:(拒絕連接)

總結(jié)使用RestTemplate運(yùn)行單元測試,不同之前的單元測試。在運(yùn)行之前必須先把項(xiàng)目跑起來,在運(yùn)行單元測試。

運(yùn)行springboot項(xiàng)目,然后運(yùn)行單元測試RestTemplate結(jié)果就正常了。
MockMVC和TestRestTemplate的使用與對比
MockMVC和TestRestTemplate都是測試RestFul接口的測試工具,TestRestTemplate可以用WebTestClient代替
MockMVC
MockMVC是模擬出一個(gè)SpringMVC的運(yùn)行環(huán)境,并沒有真正地運(yùn)行一個(gè)完整的Servlet容器。
使用方法
在測試類上加入@AutoConfigureMockMvc,然后依賴注入MockMvc對象即可。
特點(diǎn)
1、支持測試時(shí)數(shù)據(jù)的回滾,這適用于測試一個(gè)涉及修改數(shù)據(jù)庫數(shù)據(jù)的方法
2、由于MockMVC并沒有真正的啟動(dòng)一個(gè)完整的server服務(wù),故當(dāng)要測試一些拋出可檢異常并會(huì)返回error page(4開頭的狀態(tài)碼),因?yàn)閑rror page是由Servlet container提供的,所以MockMVC無法測試這些方法,他還是會(huì)返回200狀態(tài)碼。
RestTemlate
RestTemplate就是啟動(dòng)一個(gè)完整的server。
使用方法
在@SpringBootTest注解上設(shè)置webEnvironment屬性為WebEnvironment.RANDOM_PORT或WebEnvironment.DEFINED_PORT即可
// An highlighted block
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
class RandomPortTestRestTemplateExampleTests {
@Test
void exampleTest(@Autowired TestRestTemplate restTemplate) {
String body = restTemplate.getForObject("/", String.class);
assertThat(body).isEqualTo("Hello World");
}
}
特點(diǎn)
1、不支持回滾,因?yàn)檫\(yùn)行測試方法和server服務(wù)不在同一個(gè)線程,所以無法控制server服務(wù)。
2、可以測試會(huì)拋出可檢異常的方法。
3、TestRestTemplate目前不支持測試Patch類型的Http請求,可以用TestWebClient代替。
4、可以將返回結(jié)果反序列化為特定的對象,MockMVC無法做到,只能將返回的Json數(shù)據(jù)轉(zhuǎn)化為String。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java實(shí)現(xiàn)根據(jù)地址智能識別省市區(qū)縣
這篇文章主要為大家詳細(xì)介紹了如何編寫一個(gè)Java工具類,可以根據(jù)身份證地址或用戶輸入的地址,智能識別并提取出詳細(xì)的省市區(qū)縣信息,感興趣的小伙伴可以了解下2025-03-03
spring cloud hystrix 超時(shí)時(shí)間使用方式詳解
這篇文章主要介紹了spring cloud hystrix 超時(shí)時(shí)間使用方式,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-01-01
Java中StringBuilder與StringBuffer使用及源碼解讀
我們前面學(xué)習(xí)的String就屬于不可變字符串,因?yàn)槔碚撋弦粋€(gè)String字符串一旦定義好,其內(nèi)容就不可再被改變,但實(shí)際上,還有另一種可變字符串,包括StringBuilder和StringBuffer兩個(gè)類,那可變字符串有什么特點(diǎn),又怎么使用呢,接下來就請大家跟我一起來學(xué)習(xí)吧2023-05-05
Java實(shí)戰(zhàn)項(xiàng)目之校園跑腿管理系統(tǒng)的實(shí)現(xiàn)
只有理論是不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+Springboot+vue+maven+elementui+mysql實(shí)現(xiàn)一個(gè)校園跑腿管理系統(tǒng),大家可以在過程中查缺補(bǔ)漏,提升水平2022-01-01
詳解java一維數(shù)組及練習(xí)題實(shí)例
在本篇文章里小編給大家整理了關(guān)于java一維數(shù)組及練習(xí)題的相關(guān)知識點(diǎn)和實(shí)例代碼,有需要的朋友們跟著學(xué)習(xí)下。2019-07-07
關(guān)于spring.factories的常用配置項(xiàng)說明
這篇文章主要介紹了關(guān)于spring.factories的常用配置項(xiàng)說明,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-07-07
JAVA異常處理機(jī)制之throws/throw使用情況
這篇文章主要介紹了JAVA異常處理機(jī)制之throws/throw使用情況的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07

