成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

在單元測試依賴于真實的配置及網(wǎng)絡(luò)的時候增加模擬返回,使用MockRestServiceServer測

yedf / 3266人閱讀

摘要:解決方案使用類來解決,根據(jù)官方文檔描述,該類主要用于設(shè)計直接或間接使用的測試,通過設(shè)置的預(yù)期請求,來模擬發(fā)送回來的響應(yīng),來消除對實際請求的依賴。

問題描述:

在我們當(dāng)前的項目中我們的在請求微信獲取微信企業(yè)號的時候調(diào)用微信的接口,當(dāng)我們在測試的時候,我們所測試的方法所使用的接口也是真實的接口,這是不正確的,因為我們的測試目的是測試一下我們的所寫的代碼是否正確,但當(dāng)我們的代碼依賴于其他組織的網(wǎng)絡(luò)配置時,當(dāng)其他組織的接口出現(xiàn)問題之后,我們的測試就會報錯,所以為了我們的測試不依賴于外部的接口,我們要在測試的時候模擬接口返回數(shù)據(jù)。

解決方案

使用MockRestServiceServer類來解決,根據(jù)官方文檔描述,該類主要用于設(shè)計直接或間接使用RestTemplate的測試,通過設(shè)置RestTemplate的預(yù)期請求,來模擬發(fā)送回來的響應(yīng),來消除對實際請求的依賴。

通過代碼來簡單的介紹一下如何使用

要測試的代碼如下,使用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ù)進行響應(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();

官方實例如下:

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請求。

總結(jié):

在寫的時候錯誤的使用如下實現(xiàn)方式:

@GetMapping("/students/{studentId}/courses")
public List retrieveCoursesForStudent(@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)鍵點,而且使用英文goole的能力還有待提高。

參考:

官方介紹

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/74502.html

相關(guān)文章

  • 隨行付微服務(wù)單元

    摘要:輸出結(jié)果需要人工檢查的測試不是一個好的單元測試。為了有效的進行單元測試,需要遵循一定的方法,通常采用路徑覆蓋法設(shè)計單元測試用例。 在微服務(wù)架構(gòu)下高覆蓋率的單元測試是保障代碼質(zhì)量的第一道也是最重要的關(guān)口,應(yīng)該持之以恒。 背景 單元測試為代碼質(zhì)量保駕護航,是提高業(yè)務(wù)質(zhì)量的最直接手段,實踐證明,非常多的缺陷完全可以通過單元測試來發(fā)現(xiàn),測試金字塔提出者Martin Fowler 強調(diào)如果一個高...

    xiguadada 評論0 收藏0
  • 論性能

    摘要:吞吐量一般結(jié)合業(yè)務(wù)需求而定服務(wù)器資源占用占用率內(nèi)存使用率命中率篇是一種預(yù)測系統(tǒng)行為和性能的負(fù)載測試工具。負(fù)載測試與壓力測試都是性能測試。通過平臺接口可進行合理的性能測試。有利于測試人員及時定位問題。 Part 1:性能測試 性能測試是通過自動化的測試工具模擬多種正常、峰值以及異常負(fù)載條件來對系統(tǒng)的各項性能指標(biāo)進行測試。 A. 類別 性能測試包括負(fù)載測試、壓力測試、基準(zhǔn)測試等。 i. 負(fù)...

    qpal 評論0 收藏0
  • ??軟件經(jīng)典10題(含解析) 軟件行業(yè),去大公司還是小公司好???

    年輕人都會犯的3個職場錯誤,你有幾個? 測試人員如何才能快速成長? 軟件測試行業(yè),去大公司還是小公司好? 同學(xué)們可以用這 10 道題目,找到自己的薄弱點,對癥下藥哦。 我的建議是:你們可以拿出紙筆,寫下這 10 道題的答案,然后再與文末的答案進行對照~ 選擇題 1. (單選)當(dāng)需要對某個系統(tǒng)進行測試的時候,應(yīng)該從哪些方面來設(shè)計測試用例? A. 功能驗證 B. 性能相關(guān)的驗證 C. 兼容性相關(guān)的驗...

    zhunjiee 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<