Spring使用RestTemplate和Junit單元測(cè)試的注意事項(xiàng)
使用RestTemplate和Junit單元測(cè)試的注意事項(xiàng)
對(duì)于之前寫單元測(cè)試注入的的service,這樣單元測(cè)試也可以跑通。
springboot中的單元測(cè)試
但是如果現(xiàn)在送RestTemplate,代碼如下:
運(yùn)行單元測(cè)試會(huì)報(bào)如下錯(cuò)誤:(拒絕連接)
總結(jié)使用RestTemplate運(yùn)行單元測(cè)試,不同之前的單元測(cè)試。在運(yùn)行之前必須先把項(xiàng)目跑起來,在運(yùn)行單元測(cè)試。
運(yùn)行springboot項(xiàng)目,然后運(yùn)行單元測(cè)試RestTemplate結(jié)果就正常了。
MockMVC和TestRestTemplate的使用與對(duì)比
MockMVC和TestRestTemplate都是測(cè)試RestFul接口的測(cè)試工具,TestRestTemplate可以用WebTestClient代替
MockMVC
MockMVC是模擬出一個(gè)SpringMVC的運(yùn)行環(huán)境,并沒有真正地運(yùn)行一個(gè)完整的Servlet容器。
使用方法
在測(cè)試類上加入@AutoConfigureMockMvc,然后依賴注入MockMvc對(duì)象即可。
特點(diǎn)
1、支持測(cè)試時(shí)數(shù)據(jù)的回滾,這適用于測(cè)試一個(gè)涉及修改數(shù)據(jù)庫數(shù)據(jù)的方法
2、由于MockMVC并沒有真正的啟動(dòng)一個(gè)完整的server服務(wù),故當(dāng)要測(cè)試一些拋出可檢異常并會(huì)返回error page(4開頭的狀態(tài)碼),因?yàn)閑rror page是由Servlet container提供的,所以MockMVC無法測(cè)試這些方法,他還是會(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)行測(cè)試方法和server服務(wù)不在同一個(gè)線程,所以無法控制server服務(wù)。
2、可以測(cè)試會(huì)拋出可檢異常的方法。
3、TestRestTemplate目前不支持測(cè)試Patch類型的Http請(qǐng)求,可以用TestWebClient代替。
4、可以將返回結(jié)果反序列化為特定的對(duì)象,MockMVC無法做到,只能將返回的Json數(shù)據(jù)轉(zhuǎn)化為String。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java實(shí)現(xiàn)合并word文檔的示例代碼
在做項(xiàng)目中,經(jīng)常會(huì)遇到一種情況,需要將一個(gè)小word文檔的內(nèi)容插入到一個(gè)大word(主文檔)中。本文就為大家準(zhǔn)備了Java實(shí)現(xiàn)合并word文檔的方法,需要的可以參考一下2022-08-08Maven項(xiàng)目改為spring boot項(xiàng)目的方法圖解
這篇文章主要介紹了Maven項(xiàng)目改為spring boot項(xiàng)目的方法圖解 ,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-09-09Java使用Hutool+自定義注解實(shí)現(xiàn)數(shù)據(jù)脫敏
我們?cè)谑褂檬謾C(jī)銀行的時(shí)候經(jīng)常能看到APP上會(huì)將銀行卡的卡號(hào)中間部分給隱藏掉使用 ***** 來代替,在某些網(wǎng)站上查看一些業(yè)務(wù)密碼時(shí)(例如簽到密碼等)也會(huì)使用 ***** 來隱藏掉真正的密碼,那么這種方式是如何實(shí)現(xiàn)的呢,本文將給大家介紹使用Hutool+自定義注解實(shí)現(xiàn)數(shù)據(jù)脫敏2023-09-09Java中線程的等待與喚醒_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
在Object.java中,定義了wait(), notify()和notifyAll()等接口。wait()的作用是讓當(dāng)前線程進(jìn)入等待狀態(tài),同時(shí),wait()也會(huì)讓當(dāng)前線程釋放它所持有的鎖。下面通過本文給大家介紹Java中線程的等待與喚醒知識(shí),感興趣的朋友一起看看吧2017-05-05IDEA中WebService生成Java代碼并調(diào)用外部接口實(shí)現(xiàn)代碼
這篇文章主要介紹了IDEA中WebService生成Java代碼并調(diào)用外部接口實(shí)現(xiàn),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-05-05使用Log4j為項(xiàng)目配置日志輸出應(yīng)用詳解以及示例演示的實(shí)現(xiàn)分析
本篇文章是對(duì)Log4j為項(xiàng)目配置日志輸出應(yīng)用詳解以及示例演示的實(shí)現(xiàn)進(jìn)行了分析介紹,需要的朋友參考下2013-05-05SpringBoot集成SpringSecurity和JWT做登陸鑒權(quán)的實(shí)現(xiàn)
這篇文章主要介紹了SpringBoot集成SpringSecurity和JWT做登陸鑒權(quán)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04