Spring Boot(十二)單元測試JUnit

一、介紹

JUnit是一款優秀的開源Java單元測試框架,也是目前使用率最高最流行的測試框架,開發工具Eclipse和IDEA對JUnit都有很好的支持,JUnit主要用于白盒測試和回歸測試。

  • 白盒測試:把測試對象看作一個打開的盒子,程序內部的邏輯結構和其他信息對測試人 員是公開的;

  • 回歸測試:軟件或環境修復或更正后的再測試;

  • 單元測試:最小粒度的測試,以測試某個功能或代碼塊。一般由程序員來做,因為它需要知道內部程序設計和編碼的細節;

JUnit GitHub地址:github.com/junit-team

二、JUnit使用

開發環境:

  • Spring Boot 2.0.4 RELEASE
  • JUnit 4.12
  • Maven
  • IDEA 2018.2

2.1 檢測JUnit依賴

如果是Spring Boot項目默認已經加入了JUnit框架支持,可在pom.xml中查看:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope>
</dependency>
復制代碼

如果Maven項目中沒有添加JUnit依賴,可參照如上代碼,手動添加。

2.2 基礎使用

簡單的測試代碼如下:

@RunWith(SpringRunner.class)
@SpringBootTest
public class SimpleTest {@Testpublic void doTest() {int num = new Integer(1);Assert.assertEquals(num, 1);}
}
復制代碼

在測試類中郵件運行項目,效果如下:

從控制臺可以看出測試通過了。

2.3 注解說明

2.3.1 注解列表

  • @RunWith:標識為JUnit的運行環境;
  • @SpringBootTest:獲取啟動類、加載配置,確定裝載Spring Boot;
  • @Test:聲明需要測試的方法;
  • @BeforeClass:針對所有測試,只執行一次,且必須為static void;
  • @AfterClass:針對所有測試,只執行一次,且必須為static void;
  • @Before:每個測試方法前都會執行的方法;
  • @After:每個測試方法前都會執行的方法;
  • @Ignore:忽略方法;

2.3.2 超時測試

代碼如下,給Test設置timeout屬性即可,時間單位為毫秒:

@Test(timeout = 1000)

2.4 斷言測試

斷言測試也就是期望值測試,是單元測試的核心也就是決定測試結果的表達式,Assert對象中的斷言方法:

  • Assert.assertEquals 對比兩個值相等
  • Assert.assertNotEquals 對比兩個值不相等
  • Assert.assertSame 對比兩個對象的引用相等
  • Assert.assertArrayEquals 對比兩個數組相等
  • Assert.assertTrue 驗證返回是否為真
  • Assert.assertFlase 驗證返回是否為假
  • Assert.assertNull 驗證null
  • Assert.assertNotNull 驗證非null

代碼示例如下:

@Test
public void doTest() {String[] string1 = {"1", "2"};String[] string2 = string1;String[] string3 = {"1", "2"};Assert.assertEquals(string1, string2);Assert.assertEquals(string2, string3);Assert.assertSame(string1, string2);Assert.assertSame(string2, string3); //驗證不通過,string2、string3指向的引用不同
}
復制代碼

2.5 Web模擬測試

在Spring Boot項目里面可以直接使用JUnit對web項目進行測試,Spring 提供了“TestRestTemplate”對象,使用這個對象可以很方便的進行模擬請求。

Web測試只需要進行兩步操作:

  1. 在@SpringBootTest注解上設置“ebEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT”隨機端口;
  2. 使用TestRestTemplate進行post或get請求;

示例代碼如下:

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class UserControllerTest {@Autowiredprivate TestRestTemplate restTemplate;@Testpublic void getName() {String name = restTemplate.getForObject("/name", String.class);System.out.println(name);Assert.assertEquals("Adam", name);}
}
復制代碼

其中getForObject的含義代表執行get請求,并返回Object結果,第二個參數設置返回結果為String類型,更多的請求方法:

  • getForEntity:Get請求,返回實體對象(可以是集合);
  • postForEntity:Post請求,返回實體對象(可以是集合);
  • postForObject:Post請求,返回對象;

2.6 數據庫測試

在測試數據操作的時候,我們不想讓測試污染數據庫,也是可以實現的,只需要添加給測試類上添加“@Transactional”即可,這樣既可以測試數據操作方法,又不會污染數據庫了。

示例代碼如下:

@Test
@Transactional
public void saveTest() {User user = new User();user.setName("Adam");user.setAge(19);user.setPwd("123456");userRepository.save(user);System.out.println("userId:" + user.getId());Assert.assertTrue(user.getId()>0);
}
復制代碼

執行效果如下:

我們可以看到Id有了,也測試通過了,說明數據是添加是正常的,但查看數據庫發現數據里面是沒有這條數據的。

如果把“@Transactional”去掉的話,數據庫就會正常插入了。

2.7 Idea快速開啟測試

在Idea里面可以快速的添加測試的方法,只需要在要測試的類里面右鍵選擇“GoTo”點擊“Test”,選擇你需要測試的代碼,點擊生成即可,如果是Windows 用戶可以使用默認快捷鍵“Ctrl + Shift + T”,效果如下圖:

選完方法之后,點擊OK按鈕,就生成了對應的測試代碼,用戶只需要完善框架里面的具體測試邏輯就可以了。

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

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

相關文章

介紹TCP/udp比較好的博客

http://blog.csdn.net/nana_93/article/details/8743525

Kubernetes容器上下文環境

目錄貼&#xff1a;Kubernetes學習系列 下面我們將主要介紹運行在Kubernetes集群中的容器所能夠感知到的上下文環境&#xff0c;以及容器是如何獲知這些信息的。 首先&#xff0c;Kubernetes提供了一個能夠讓容器感知到集群中正在發生的事情的方法&#xff1a;環境變量。作為容…

Shell-腳本只能運行1次

用空文件進行判斷 pathpwd if [ -f ${path}/.runned ]; then {echo "This script can only execute once! You have runned it!"exit } elsetouch ${path}/.runned fi 轉載于:https://www.cnblogs.com/music378/p/7677648.html

運放電壓跟隨電路應用

電壓跟隨器的顯著特點&#xff1a;輸入阻抗高&#xff0c;輸出阻抗低。 如下所示為利用放大器搭建的電壓跟隨電路&#xff0c;方便測量電壓大小&#xff1a; 此電路目的是測量電池電壓&#xff0c;電池電壓范圍&#xff08;3~4.2V&#xff09;分壓后最大電壓為2.1V 屬于3.3V電…

Mac與Phy組成原理的簡單分析

Mac與Phy組成原理的簡單分析 2011-12-28 15:30:43 //http://blog.chinaunix.net/uid-20528014-id-3050217.html 本文乃fireaxe原創&#xff0c;使用GPL發布&#xff0c;可以自由拷貝&#xff0c;轉載。但轉載請保持文檔的完整性&#xff0c;并注明原作者及原鏈接。內容可任意使…

[BZOJ3994][SDOI2015]約數個數和

3994: [SDOI2015]約數個數和 Time Limit: 20 Sec Memory Limit: 128 MB Submit: 1104 Solved: 762 [Submit][Status][Discuss]Description 設d(x)為x的約數個數&#xff0c;給定N、M&#xff0c;求 Input 輸入文件包含多組測試數據。 第一行&#xff0c;一個整數T&#xff0…

月蝕動漫獲快看漫畫600萬元A輪戰略投資,走國漫精品化路線

11月5日消息&#xff0c;月蝕動漫宣布獲得快看漫畫600萬元A輪戰略投資。 據了解&#xff0c;月蝕動漫曾于2017年1月獲得原力創投的百萬級種子輪投資&#xff0c;2018年1月獲得英諾天使基金的百萬級天使輪投資。 據月蝕動漫創始人賀小桐透露&#xff0c;團隊能在行業寒冬期獲得…

大力智能臺燈T6 結構拆解

近幾年教育硬件產品層出不窮&#xff0c;教育硬件賽道布局時間較長的有網易、訊飛、步步高系等公司&#xff0c;2020年10月&#xff0c;字節跳動旗下大力教育經過兩年多的調研和研發&#xff0c;高調推出首款智能硬件產品“大力智能作業臺燈” T5。 上市一年取得不錯的銷售成績…

C++靜態庫與動態庫

http://www.cnblogs.com/skynet/p/3372855.html

第5章 IDA Pro

5.1 加載一個可執行文件 默認情況下IDA Pro的反匯編代碼中不包含PE頭或資源節&#xff0c;可以手動指定加載。 5.2 IDA Pro接口 5.2.1 反匯編窗口模式 二進制模式/圖形模式&#xff1a; 圖形模式&#xff1a;紅色表示一個條件跳轉沒有被采用&#xff0c;綠色表示這個條件跳轉被…

樹鏈剖分(模板)

luogu題庫 題目描述 如題&#xff0c;已知一棵包含N個結點的樹&#xff08;連通且無環&#xff09;&#xff0c;每個節點上包含一個數值&#xff0c;需要支持以下操作&#xff1a; 操作1&#xff1a; 格式&#xff1a; 1 x y z 表示將樹從x到y結點最短路徑上所有節點的值都加上…

定制或外購適配器規格需求列表

輸入特性例如輸入電壓180~264VAC 200~264VAC輸入頻率47~63Hz輸入電流0.7A Max功率因素&#xff1e;0.47 10W220VAC浪涌電流&#xff1c;60A電源效率&#xff1e;81.26%空載功耗0.2W 輸出特性例如輸出電壓11.4~12.6V DC輸出電流1.75A紋波要求&#xff1c;120mV 負載調整率5%線性…

使用 typescript ,提升 vue 項目的開發體驗(1)

此文已由作者張漢銳授權網易云社區發布。歡迎訪問網易云社區&#xff0c;了解更多網易技術產品運營經驗。前言&#xff1a;對于我們而言&#xff0c;typescript 更像一個工具官方指南從 vue2.5 之后&#xff0c;vue 對 ts 有更好的支持。根據官方文檔&#xff0c;vue 結合 type…

Linux進程間通信——使用共享內存

//本文轉載http://blog.csdn.net/ljianhui/article/details/10253345下面將講解進程間通信的另一種方式&#xff0c;使用共享內存。一、什么是共享內存顧名思義&#xff0c;共享內存就是允許兩個不相關的進程訪問同一個邏輯內存。共享內存是在兩個正在運行的進程之間共享和傳遞…

laravel擴展包開發步驟總結

1. 創建包1php artisan workbench vendor/package --resources注: vendor:開發商名 package:包名2.修改下包里composer.json中的authors123456"authors": [{"name": "cicl","email": "test126.com"}]3. 為創建的包注冊Se…

洛谷 P1340 獸徑管理

題目描述 約翰農場的牛群希望能夠在 N 個(1<N<200) 草地之間任意移動。草地的編號由 1到 N。草地之間有樹林隔開。牛群希望能夠選擇草地間的路徑&#xff0c;使牛群能夠從任一 片草地移動到任一片其它草地。 牛群可在路徑上雙向通行。 牛群并不能創造路徑&#xff0c;但是…

功放關鍵規格參數檢查

編號規格備注1功放類型(開環/閉環)影響電性能指標2工作電壓(V)影響IC的穩定性3最大耐壓(V)影響IC的穩定性4最小負載(ohm)穩定性&#xff0c;過流&#xff0c;輸出功率&#xff0c;散熱5輸出功率過流&#xff0c;輸出功率&#xff0c;散熱6輸出方式(SE/BTL/PBTL)輸出功率&#x…

不踩雷不將就 京東智能產品30天無憂退

剁手節已經來臨&#xff0c;鋪天蓋地的促銷信息讓人應接不暇&#xff0c;恰好又是換季&#xff0c;確實需要買買買一波了。各種滿減活動讓人眼花繚亂&#xff0c;這波堪稱全年最大力度的促銷活動&#xff0c;令人是又喜又怕。倘若之前踩過雷的朋友&#xff0c;必然現在會謹慎許…

Linux進程間通信——使用信號量

//轉自http://blog.csdn.net/ljianhui/article/details/10243617 這篇文章將講述別一種進程間通信的機制——信號量。注意請不要把它與之前所說的信號混淆起來&#xff0c;信號與信號量是不同的兩種事物。有關信號的更多內容&#xff0c;可以閱讀我的另一篇文章&#xff1a;L…

麥克風陣列音頻檢查方法和標準

為確保產品能夠符合算法要求&#xff0c;務必提前做好相關設計&#xff0c;盡量確保各項指標滿足如下標準。 音頻評測工作&#xff0c;主要集中在研發設計階段&#xff1b;針對產品形態的不同&#xff0c;測試可分為裸板測試和整機測 試&#xff0c;下表為不同階段需要測試的…