[易學springboot]對controller層進行單元測試

2021-01-19 IT有意思

在springboot中進行單元測試,大家已經非常熟悉。我們通常測試的是service層和dao層。

對controller層的直接測試可能進行的較少。

下面介紹一下在SpringBoot中進行Controller層的Rest請求測試的方法。

還是使用我之前的一個rest請求

第一種方法:

@RunWith(SpringRunner.class)// 隨機創建出一個埠測試@SpringBootTest(classes = DemoApplication.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)public class HelloControllerTest { @Autowired private TestRestTemplate restTemplate; @Test public void sayHello() throws Exception { ResponseEntity<String> response = this.restTemplate.getForEntity("/hello", String.class); System.out.println(String.format("測試結果為:%s", response.getBody())); }}

第二種方法:

@RunWith(SpringRunner.class)@WebMvcTest(controllers = {HelloController.class})public class HelloControllerTest2 { @Autowired private MockMvc mockMvc; @MockBean public Uncle uncle; @Test public void sayHello() throws Exception { ResultActions perform = mockMvc.perform(MockMvcRequestBuilders.get("/hello")); // 列印下結果看看 System.out.println(perform.andReturn().getResponse().getContentAsString()); perform.andExpect(MockMvcResultMatchers.status().isOk()) .andExpect(MockMvcResultMatchers.content().string("content name is uncley and age is 40")); }}

注意,有一個mockBean。其實我根本用不到這個。但是因為我測試的Controller中有這個依賴。

這種方式只測試controller,controller裡面的一些依賴,需要你自己去mock。所以有點麻煩

@WebMvcTest 不能同時使用@SpringBootTest,所以不會加載整個spring容器。

第三種方式:

因為第二種方法有點不爽,看了下源碼,有這麼一句

說如果你想加載整個容器,那就別用@WebMvcTest,使用@SpringBootTest和@AutoConfigureMockMvc組合

那麼,來吧,問題迎刃而解

@RunWith(SpringRunner.class)@SpringBootTest(classes = DemoApplication.class)@AutoConfigureMockMvcpublic class HelloControllerTest3 { @Autowired private MockMvc mockMvc; @Test public void sayHello() throws Exception { ResultActions perform = mockMvc.perform(MockMvcRequestBuilders.get("/hello")); // 列印下結果看看 System.out.println(perform.andReturn().getResponse().getContentAsString()); perform.andExpect(MockMvcResultMatchers.status().isOk()) .andExpect(MockMvcResultMatchers.content().string("content name is uncley and age is 40")); }}總結:

隨著springboot的發展,單元測試是越來越簡單了

相關焦點

  • SpringBoot+GitLab+Docker+Jenkins實現持續集成下
    Controller類package com.itheima.controller;import org.springframework.web.bind.annotation.DeleteMapping;import org.springframework.web.bind.annotation.GetMapping
  • ELK入門使用-與springboot集成
    Elasticsearch用於深度搜索和數據分析,它是基於Apache Lucene的分布式開源搜尋引擎,無須預先定義數據結構就能動態地對數據進行索引;Logstash用於日誌集中管理,包括從多臺伺服器上傳輸和轉發日誌,並對日誌進行豐富和解析,是一個數據管道,提供了大量插件來支持數據的輸入和輸出處理;最後是Kibana,提供了強大而美觀的數據可視化,Kibana
  • 單元測試常用的方法
    採用由底向上的方式進行開發,底層的代碼先開發並先測試,可以避免編寫樁代碼,這樣做的好處有:減少了工作量;測試上層函數時,也是對下層函數的間接測試;當下層函數修改時,通過回歸測試可以確認修改是否導致上層函數產生錯誤。
  • 基於Spring Boot + MVC 之控制器Controller實現
    2 創建一個放控制器的包創建一個專門用來存放控制器的包,這些控制器可以給到前端頁面或者第三方進行調用,如果給第三方調用,則需要配置跨域。在src-main-java下面,找到com.zzfeng.springbootdemo這個包,在這個包上面右擊,再分別點擊New-Package,進入創建包的面板。
  • springMVC框架之Controller組件
    好的各位小夥伴今天繼續來分享springMVC框架今天咱們來一起認識 springMVC 框架的 Controller,咱們之前也說了springMVC 給我們提供了很多的組件,其中需要我們程式設計師來寫的就有controller
  • K8s單controller多集群監測總結——client-go
    但是 想要更上一層就需要閱讀別人的源碼啦。對於K8s 我師傅曾說過這主要是針對接口的使用,如果真的有技術含量的部分,那肯定就是網絡部分了,網絡的實現,如何改善K8s網絡和外部的通訊。client-go的github地址:https://godoc.org/admiralty.io/multicluster-controller,client-go裡面的examples
  • 單元測試 vs 集成測試,你該怎麼選?
    在我看來,集成測試和單元測試是健壯軟體的基石。因此,今天讓我們看看單元測試與集成測試之間的區別,以及你什麼時候該選擇哪種測試。什麼是一個單元?一個單元是邏輯上分離的最小代碼塊單元測試是一種孤立地測試儘可能小的代碼片段的測試。那麼,什麼是一個單元?術語「單元」來自數學。數字 1 被認為是單元,因為它是最小的自然數。它是最小的正整數。
  • 細說unittest單元測試框架
    一、單元測試框架說明 單元測試是指在編程中,針對程序模塊的最小單元(類中的方法)進行正確性檢驗的測試工作。python+selenium自動化測試中通常使用unittest或者pytest作為單元測試框架。
  • SpringBoot開發自己的@Enable功能
    @Enable*是springboot中用來啟用某一個功能特性的一類註解。
  • 基於ISO26262的單元測試詳解
    針對軟體單元測試,ISO26262標準的第六章第九部分給出了具體要求說明,包括測試的前提條件、推薦測試方法、工作產品等。   自動化單元/集成測試工具Tessy通過IEC 61508和ISO26262認證,能夠支持規範中對單元測試環節的要求,根據標準中要求的方法使用工具進行單元測試,確保被測軟體能夠達到功能安全不同等級的要求。
  • 神經網絡基礎:七種網絡單元,四種層連接方式
    選自THE ASIMOV INSTITUTE作者:FJODOR VAN VEEN機器之心編譯參與:黃小天、李亞洲2016 年 9 月,Fjodor Van Veen 寫了一篇名為《The Neural Network Zoo》的文章,全面盤點了神經網絡的大量框架,並繪製了直觀示意圖進行說明。
  • Spring 的 Controller 是單例還是多例?怎麼保證並發的安全
    (給ImportNew加星標,提高Java技能)轉自:riemann_ 來源 連結:blog.csdn.net/riemann_/article/details/97698560controller我們下面來簡單的驗證下:package com.riemann.springbootdemo.controller;import org.springframework.context.annotation.Scope;import org.springframework.stereotype.Controller
  • 64層3D NAND技術 飢餓鯊共同研發東芝TR200固態硬碟拆解測試
    最近一款東芝新品TR200固態硬碟以搭載了64層3D BiCS FLASH吸引了市場的焦點,相比較以往老產品對於內部架構進行的大改動,體現的優點就是:高密度及高容量垂直堆疊結構存儲器單元間隔增大降低存儲單元耦合效應更高效存儲編程速度三位化高穩定結構提供可靠性能
  • 新時代的易學古籍資料庫建設
    收集整理易學典籍,夯實資料庫基礎  作為一項浩大的文化工程,易學古籍資料庫建設應當以易學古籍的收集、整理和編纂為前提和重要基礎。  我國歷代學人非常重視對卷帙浩繁的易學文獻進行整理、編纂,從最早的官修書目《別錄》《七略》,到《漢書·藝文志》《隋書·經籍志》等史志目錄等,從中都體現了易學文獻整理、編纂的重要成果。
  • 靈機文化馮劍榮:移動網際網路時代,易學大有乾坤
    靈機文化馮劍榮:移動網際網路時代,易學大有乾坤 【IT時代網、IT時代周刊銳評】現在什麼傳統文化都已經開始網際網路化了,易學,在我們看來很神秘的一門傳統文化也開始被人使用移動網際網路進行傳播了。
  • 人教版一年級上冊數學第六單元測試卷
    人教版一年級上冊數學第六單元測試卷 發送消息「上冊2020」或「下冊2020」、「資料」即可直接領取更多電子版資料~ 更 多 內 容 15.人教版小學六年級數學下冊期中測試卷(附答案) 16.人教版小學六年級下冊數學第五單元測試卷
  • :通過普通介電層克服半選擇問題的有機鐵電基1T1T隨機存儲器單元
    該研究團隊為了克服半選擇問題,在選擇電晶體時需要與鐵電場效應電晶體組成1T1T FeRAM 單元。與使用多個電介質的複雜製造方法不同,該系統簡化了使用一種普通電介質進行1T1T FeRAM單元製造的過程。文中提出了用於半導體/絕緣體接口調製的策略,並將其應用於在訪問驅動器屬性或尋址時高性能的非遲滯選擇電晶體中。
  • 第五單元測試卷
    第五單元測試卷一、填空題。1. 圖形的周長就是圍成這個圖形所有線段長度的(  )。2.第五單元測試卷答案一、1.總和  2.長 寬 長 寬 3.4 4.3 5.40 6.100 7.100 8.28二、1.C 2.B 3.B 4.A 5.C三、1. 2. 3. 4. 5.
  • 如何進行接口測試?如何做好接口測試?API 測試該了解的技術細節
    那麼,什麼是 API 測試?API 測試其實是一種用程序或工具來發送數據,同時驗收系統的返回值的方法。這種測試更偏向於業務實現邏輯。常見的網絡協議有 TCP、Http、webservice、socket 等,http?