摘要:解決方案使用類來解決,根據(jù)官方文檔描述,該類主要用于設(shè)計(jì)直接或間接使用的測試,通過設(shè)置的預(yù)期請求,來模擬發(fā)送回來的響應(yīng),來消除對實(shí)際請求的依賴。
問題描述:
在我們當(dāng)前的項(xiàng)目中我們的在請求微信獲取微信企業(yè)號的時候調(diào)用微信的接口,當(dāng)我們在測試的時候,我們所測試的方法所使用的接口也是真實(shí)的接口,這是不正確的,因?yàn)槲覀兊臏y試目的是測試一下我們的所寫的代碼是否正確,但當(dāng)我們的代碼依賴于其他組織的網(wǎng)絡(luò)配置時,當(dāng)其他組織的接口出現(xiàn)問題之后,我們的測試就會報(bào)錯,所以為了我們的測試不依賴于外部的接口,我們要在測試的時候模擬接口返回?cái)?shù)據(jù)。
解決方案使用MockRestServiceServer類來解決,根據(jù)官方文檔描述,該類主要用于設(shè)計(jì)直接或間接使用RestTemplate的測試,通過設(shè)置RestTemplate的預(yù)期請求,來模擬發(fā)送回來的響應(yīng),來消除對實(shí)際請求的依賴。
通過代碼來簡單的介紹一下如何使用
要測試的代碼如下,使用RestTemplate來請求第三方的api。
@Autowired private RestTemplate restTemplate; .... public void synchronizeData() { ..... logger.debug("調(diào)用接口,獲取所有的教師"); JSONObject jsonObject = restTemplate.getForEntity(url + "...").getBody(); ..... } .....
測試代碼如下:
先將restTemplate設(shè)置成MockRestServiceServer,然后使用MockRestServiceServer來設(shè)置預(yù)期請求,和模擬返回,然后我們測試的請求就會按我們模擬的數(shù)據(jù)進(jìn)行響應(yīng)。
MockRestServiceServer mockRestServiceServer = MockRestServiceServer.createServer(restTemplate); mockRestServiceServer.expect( ExpectedCount.once(), MockRestRequestMatchers.requestTo(new URI(accessTokenUrl))) .andExpect(MockRestRequestMatchers.method(HttpMethod.GET)) .andRespond(MockRestResponseCreators.withStatus(HttpStatus.OK) .contentType(MediaType.APPLICATION_JSON_UTF8) .body(jsonObjectTocken.toJSONString())); teacherService.synchronizeData();
官方實(shí)例如下:
RestTemplate restTemplate = new RestTemplate() MockRestServiceServer server = MockRestServiceServer.bindTo(restTemplate).build(); server.expect(manyTimes(), requestTo("/hotels/42")).andExpect(method(HttpMethod.GET)) .andRespond(withSuccess("{ "id" : "42", "name" : "Holiday Inn"}", MediaType.APPLICATION_JSON)); Hotel hotel = restTemplate.getForObject("/hotels/{id}", Hotel.class, 42); // Use the hotel instance... // Verify all expectations met server.verify();
方法介紹:
bindTo(RestTemplate restTemplate).build()
返回一個用于回復(fù)指定RestTemplate的生成器。
createServer(RestTemplate restTemplate)
bindTo().build()的快捷生成方式。
expect(ExpectedCount count, RequestMatcher matcher)
按RequestMatcher設(shè)置指定次數(shù)請求。
expect(RequestMatcher matcher)
完成單次http請求。
在寫的時候錯誤的使用如下實(shí)現(xiàn)方式:
@GetMapping("/students/{studentId}/courses") public ListretrieveCoursesForStudent(@PathVariable String studentId) { return studentService.retrieveCourses(studentId); } Mockito.when( studentService.retrieveCourse(Mockito.anyString(), Mockito.anyString())).thenReturn(mockCourse); RequestBuilder requestBuilder = MockMvcRequestBuilders.get( "/students/Student1/courses/Course1").accept( MediaType.APPLICATION_JSON); MvcResult result = mockMvc.perform(requestBuilder).andReturn();
導(dǎo)致這么寫怎么改都不理想,到后來請教喜碩,發(fā)現(xiàn)喜碩快速的通過google找到了正確的解決方案的相關(guān)代碼,反思自己還是能力有欠缺不能思考到問題的關(guān)鍵點(diǎn),而且使用英文goole的能力還有待提高。
參考:官方介紹
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/74502.html
摘要:輸出結(jié)果需要人工檢查的測試不是一個好的單元測試。為了有效的進(jìn)行單元測試,需要遵循一定的方法,通常采用路徑覆蓋法設(shè)計(jì)單元測試用例。 在微服務(wù)架構(gòu)下高覆蓋率的單元測試是保障代碼質(zhì)量的第一道也是最重要的關(guān)口,應(yīng)該持之以恒。 背景 單元測試為代碼質(zhì)量保駕護(hù)航,是提高業(yè)務(wù)質(zhì)量的最直接手段,實(shí)踐證明,非常多的缺陷完全可以通過單元測試來發(fā)現(xiàn),測試金字塔提出者M(jìn)artin Fowler 強(qiáng)調(diào)如果一個高...
摘要:吞吐量一般結(jié)合業(yè)務(wù)需求而定服務(wù)器資源占用占用率內(nèi)存使用率命中率篇是一種預(yù)測系統(tǒng)行為和性能的負(fù)載測試工具。負(fù)載測試與壓力測試都是性能測試。通過平臺接口可進(jìn)行合理的性能測試。有利于測試人員及時定位問題。 Part 1:性能測試 性能測試是通過自動化的測試工具模擬多種正常、峰值以及異常負(fù)載條件來對系統(tǒng)的各項(xiàng)性能指標(biāo)進(jìn)行測試。 A. 類別 性能測試包括負(fù)載測試、壓力測試、基準(zhǔn)測試等。 i. 負(fù)...
年輕人都會犯的3個職場錯誤,你有幾個? 測試人員如何才能快速成長? 軟件測試行業(yè),去大公司還是小公司好? 同學(xué)們可以用這 10 道題目,找到自己的薄弱點(diǎn),對癥下藥哦。 我的建議是:你們可以拿出紙筆,寫下這 10 道題的答案,然后再與文末的答案進(jìn)行對照~ 選擇題 1. (單選)當(dāng)需要對某個系統(tǒng)進(jìn)行測試的時候,應(yīng)該從哪些方面來設(shè)計(jì)測試用例? A. 功能驗(yàn)證 B. 性能相關(guān)的驗(yàn)證 C. 兼容性相關(guān)的驗(yàn)...
閱讀 1724·2023-04-25 14:12
閱讀 1207·2021-08-27 16:24
閱讀 2623·2019-08-30 15:44
閱讀 2976·2019-08-30 13:16
閱讀 1759·2019-08-29 14:10
閱讀 1040·2019-08-29 13:54
閱讀 1378·2019-08-29 13:09
閱讀 1916·2019-08-26 18:37