如何編寫單元測試

一、前言知識

1.開發過程

需求分析->設計->開發->測試->上線

2.測試種類

單元測試(測試模塊編碼)、黑盒測試(測試功能是否滿足需求)、白盒測試(測試程序內部的邏輯結構)、回歸測試(提出的缺陷進行二次驗證)、集成測試(測試主要的業務功能及模塊間的整合性)、系統測試(測試整個產品系統)

二、單元測試的使用

1.引入相關依賴

<!-- 單元測試的依賴--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope><exclusions><exclusion><groupId>org.junit.vintage</groupId><artifactId>junit-vintage-engine</artifactId></exclusion></exclusions></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency>

2.編寫單元測試方法

斷言:判斷程序結果是否符合預期 TestCase.assertXXX

package net.xdclass.demoproject;import junit.framework.TestCase;
import net.xdclass.demoproject.domain.Video;
import net.xdclass.demoproject.service.VideoService;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.MvcResult;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;import java.nio.charset.Charset;
import java.util.List;//1.配置
@RunWith(SpringRunner.class)  //底層用junit  SpringJUnit4ClassRunner
@SpringBootTest(classes={DemoProjectApplication.class})//啟動整個springboot工程
@AutoConfigureMockMvc
public class VideoTest {@Autowired//會自動將VideoService對象注入到VideoTest對象中,相當于new VideoService()private VideoService videoService;//2.常用注解的使用@Before//在測試用例執行前執行public void testOne(){System.out.println("這個是測試 before");}@Test//測試用例public void testVideoList(){List<Video> videoList = videoService.listVideo();//判斷videoList的大小是否大于0,如果大于0,則測試通過,如果小于0,則測試失敗TestCase.assertTrue(videoList.size()>0);}@After//在測試用例執行后執行public void testThree(){System.out.println("這個是測試 after");}}

三、單元測試的應用

1.測試controller層登錄方法

UserTest

package net.xdclass.demoproject;import junit.framework.TestCase;
import net.xdclass.demoproject.controller.UserController;
import net.xdclass.demoproject.domain.User;
import net.xdclass.demoproject.utils.JsonData;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;@RunWith(SpringRunner.class)  //底層用junit  SpringJUnit4ClassRunner
@SpringBootTest(classes={DemoProjectApplication.class})//啟動整個springboot工程
public class UserTest {@Autowiredprivate UserController userController;@Testpublic void loginTest(){//模擬前端傳遞過來的參數User user = new User();user.setUsername("jack");user.setPwd("1234");//調用controller的login方法JsonData jsonData  = userController.login(user);//打印返回的json數據System.out.println(jsonData.toString());//斷言TestCase.assertEquals(0,jsonData.getCode());}
}

2.測試service層視頻列表

VideoTest

package net.xdclass.demoproject;import junit.framework.TestCase;
import net.xdclass.demoproject.domain.Video;
import net.xdclass.demoproject.service.VideoService;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.MvcResult;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;import java.nio.charset.Charset;
import java.util.List;@RunWith(SpringRunner.class)  //底層用junit  SpringJUnit4ClassRunner
@SpringBootTest(classes={DemoProjectApplication.class})//啟動整個springboot工程
public class VideoTest {@Autowired//會自動將VideoService對象注入到VideoTest對象中,相當于new VideoService()private VideoService videoService;@Test//測試用例public void testVideoList(){List<Video> videoList = videoService.listVideo();//判斷videoList的大小是否大于0,如果大于0,則測試通過,如果小于0,則測試失敗TestCase.assertTrue(videoList.size()>0);}}

3.測試對外提供的接口

?VideoTest

package net.xdclass.demoproject;import junit.framework.TestCase;
import net.xdclass.demoproject.domain.Video;
import net.xdclass.demoproject.service.VideoService;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.MvcResult;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;import java.nio.charset.Charset;
import java.util.List;@RunWith(SpringRunner.class)  //底層用junit  SpringJUnit4ClassRunner
@SpringBootTest(classes={DemoProjectApplication.class})//啟動整個springboot工程
@AutoConfigureMockMvc//自動注入MockMvc對象,用于模擬請求
public class VideoTest {@Autowired//會自動將VideoService對象注入到VideoTest對象中,相當于new VideoService()private VideoService videoService;@Autowiredprivate MockMvc mockMvc;//模擬請求@Test//測試用例public void testVideoListApi()throws Exception{//模擬請求:會返回一個MvcResult對象,里面包含了響應的狀態碼,響應的內容MvcResult mvcResult =  mockMvc.perform(MockMvcRequestBuilders.get("/api/v1/pub/video/list"))//訪問接口的地址.andExpect(MockMvcResultMatchers.status().isOk()).andReturn();int status = mvcResult.getResponse().getStatus();//獲取響應的狀態碼System.out.println(status);// 使用下面這個,增加編碼說明,就不會亂碼打印String result = mvcResult.getResponse().getContentAsString(Charset.forName("utf-8"));System.out.println(result);}
}

四、小結?

? ? ? ? ? 單元測試的實質就是通過加入測試工具依賴,然后使用注釋和斷言來配合驗證不同取值下功能模塊的輸出結果與預期結果是否一致。

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/899849.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/899849.shtml
英文地址,請注明出處:http://en.pswp.cn/news/899849.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

LeetCode 解題思路 30(Hot 100)

解題思路&#xff1a; 遞歸參數&#xff1a; 生成括號的對數 n、結果集 result、當前路徑 path、左括號數 open、右括號數 close。遞歸過程&#xff1a; 當當前路徑 path 的長度等于 n * 2 時&#xff0c;說明已經生成有效括號&#xff0c;加入結果集。若左括號數小于 n&…

【Golang】Windows系統鍵鼠空閑監測練習

在本文中&#xff0c;我們將練習如何使用Golang編寫一個簡單的Windows系統空閑時間監測工具。該工具能夠檢測系統的空閑時間&#xff0c;并在達到一定閾值時計數。 功能概述 監控鼠標和鍵盤的空閑事件&#xff0c;每空閑超過50s&#xff0c;觸發次數加一。 該工具具有以下功…

關于React Redux

官網&#xff1a;&#x1f449;詳情一 &#x1f449;詳情二 &#x1f449;關于redux 使用原因&#xff1a;&#x1f449;詳情 /** 2-1、隨著javascript單頁應用程序的發展&#xff0c;需要在代碼中管理更多的狀態&#xff08;包括服務器響應數據、緩存數據、本地創建還未發送…

MySQL和Oracle批量插入SQL差異詳解

文章目錄 MySQL和Oracle批量插入SQL差異詳解1. 基本批量插入語法1.1 MySQL批量插入1.2 Oracle批量插入 2. 帶序列的批量插入2.1 MySQL帶自增ID的批量插入2.2 Oracle帶序列的批量插入 3. 條件批量插入3.1 MySQL條件批量插入3.2 Oracle條件批量插入 MySQL和Oracle批量插入SQL差異…

43頁可編輯PPT | 大數據管理中心設計規劃方案大數據中心組織架構大數據組織管理

這份文檔是一份關于大數據管理中心規劃設計方案的詳細報告&#xff0c;涵蓋了背景與需求分析、整體規劃方案、關鍵能力實現方案以及實施方案等內容。報告強調大數據在城市治理中的重要性&#xff0c;提出通過構建統一的大數據平臺&#xff0c;整合城市各部門數據資源&#xff0…

Python-八股總結

目錄 1 python 垃圾處理機制2 yield3 python 多繼承&#xff0c;兩個父類有同名方法怎么辦&#xff1f;4 python 多線程/多進程/協程4.1 多線程與GIL全局解釋器鎖4.2 多進程4.3 協程 5 樂觀鎖/悲觀鎖6 基本數據結構**1. 列表&#xff08;List&#xff09;****2. 元組&#xff0…

HTML 標簽類型全面介紹

HTML 標簽類型全面介紹 HTML&#xff08;HyperText Markup Language&#xff09;是構建 Web 頁面結構的基礎語言。HTML 由不同類型的標簽組成&#xff0c;每種標簽都有特定的用途。本文將全面介紹 HTML 標簽的分類及其用法。 1. HTML 標簽概述 HTML 標簽通常成對出現&#xf…

vscode中的【粘滯滾動】的基本概念和作用,關閉了以后如何開啟

1、粘滯滾動的基本概念和作用 ?VSCode中的“粘滯”功能主要是指編輯器在滾動時的一種特殊效果&#xff0c;使得編輯器在滾動到某個位置時會“粘”在那里&#xff0c;而不是平滑滾動到底部或頂部。? 粘滯滾動的基本概念和作用 粘滯滾動功能可以讓用戶在滾動時更直觀地看到當前…

【商城實戰(101)】電商未來已來:新技術引領商城發展新航向

【商城實戰】專欄重磅來襲!這是一份專為開發者與電商從業者打造的超詳細指南。從項目基礎搭建,運用 uniapp、Element Plus、SpringBoot 搭建商城框架,到用戶、商品、訂單等核心模塊開發,再到性能優化、安全加固、多端適配,乃至運營推廣策略,102 章內容層層遞進。無論是想…

深度學習Note.5(機器學習.6)

1.Runner類 一個任務應用機器學習方法流程&#xff1a; 數據集構建 模型構建 損失函數定義 優化器 模型訓練 模型評價 模型預測 所以根據以上&#xff0c;我們把機器學習模型基本要素封裝成一個Runner類&#xff08;加上模型保存、模型加載等功能。&#xff09; Runne…

linux服務器專題1------redis的安裝及簡單配置

在 linux上安裝 Redis 可以按照以下步驟進行(此處用Ubuntu 服務器進行講解)&#xff1a; 步驟 1: 更新系統包 打開終端并運行以下命令以確保你的系統是最新的&#xff1a; sudo apt update sudo apt upgrade步驟 2: 安裝 Redis 使用 apt 包管理器安裝 Redis&#xff1a; s…

面試問題總結:qt工程師/c++工程師

C 語言相關問題答案 面試問題總結&#xff1a;qt工程師/c工程師 C 語言相關問題答案 目錄基礎語法與特性內存管理預處理與編譯 C 相關問題答案面向對象編程模板與泛型編程STL 標準模板庫 Qt 相關問題答案Qt 基礎與信號槽機制Qt 界面設計與布局管理Qt 多線程與并發編程 目錄 基礎…

實現實時數據推送:SpringBoot中SSE接口的兩種方法

&#x1f31f; 前言 歡迎來到我的技術小宇宙&#xff01;&#x1f30c; 這里不僅是我記錄技術點滴的后花園&#xff0c;也是我分享學習心得和項目經驗的樂園。&#x1f4da; 無論你是技術小白還是資深大牛&#xff0c;這里總有一些內容能觸動你的好奇心。&#x1f50d; &#x…

LXC 導入多Linux系統

前提要求 ubuntu下安裝lxd 參考Rockylinux下安裝lxd 參考LXC 源替換參考LXC 容器端口發布參考LXC webui 管理<

ES的文檔更新機制

想獲取更多高質量的Java技術文章&#xff1f;歡迎訪問Java技術小館官網&#xff0c;持續更新優質內容&#xff0c;助力技術成長 Java技術小館官網https://www.yuque.com/jtostring ES的文檔更新機制 在現代應用中&#xff0c;數據的動態性越來越強&#xff0c;我們不僅需要快…

trae.ai 編輯器:前端開發者的智能效率革命

一、為什么我們需要更智能的編輯器&#xff1f; 作為從業5年的前端開發者&#xff0c;我使用過從Sublime到VSCode的各種編輯器。但隨著現代前端技術的復雜度爆炸式增長&#xff08;想想一個React組件可能涉及JSX、CSS-in-JS、TypeScript和GraphQL&#xff09;&#xff0c;傳統…

MySQL篇(一):慢查詢定位及索引、B樹相關知識詳解

MySQL篇&#xff08;一&#xff09;&#xff1a;慢查詢定位及索引、B樹相關知識詳解 MySQL篇&#xff08;一&#xff09;&#xff1a;慢查詢定位及索引、B樹相關知識詳解一、MySQL中慢查詢的定位&#xff08;一&#xff09;慢查詢日志的開啟&#xff08;二&#xff09;慢查詢日…

uniapp APP端在線升級(簡版)

設計思路&#xff1a; 1.版本比較&#xff1a;應用程序檢查其當前版本與遠程服務器上可用的最新版本 2. 更新狀態指示&#xff1a;如果應用程序是不是最新的版本&#xff0c;則頁面提示下載最新版本。 3.下載啟動&#xff1a;通過plus.downloader.createDownload()啟動新應用…

基于javaweb的SpringBoot教務課程管理設計與實現(源碼+文檔+部署講解)

技術范圍&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬蟲、數據可視化、小程序、安卓app、大數據、物聯網、機器學習等設計與開發。 主要內容&#xff1a;免費功能設計、開題報告、任務書、中期檢查PPT、系統功能實現、代碼編寫、論文編寫和輔導、論文…

使用大語言模型進行Python圖表可視化

Python使用matplotlib進行可視化一直有2個問題&#xff0c;一是代碼繁瑣&#xff0c;二是默認模板比較丑。因此發展出seaborn等在matplotlib上二次開發&#xff0c;以更少的代碼進行畫圖的和美化的庫&#xff0c;但是這也帶來了定制化不足的問題。在大模型時代&#xff0c;這個…