IDEA 單元測(cè)試覆蓋技巧分享
1.前言
通常情況下,項(xiàng)目經(jīng)理or項(xiàng)目總監(jiān)會(huì)分階段的問(wèn)測(cè)試負(fù)責(zé)人,本階段的測(cè)試覆蓋率是多少?在工作中,當(dāng)被問(wèn)到“如何提高代碼質(zhì)量”,回答無(wú)非如下幾個(gè),增加評(píng)審,代碼規(guī)約,單元測(cè)試。不知起自何年何月,如今一些機(jī)構(gòu)開(kāi)始引入“單元測(cè)試覆蓋率”的概念,并由此對(duì)程序員提出了覆蓋率要達(dá)到70%,90%,以此來(lái)評(píng)判程序員工作的質(zhì)量,以及產(chǎn)品的質(zhì)量。這里先預(yù)為單元測(cè)試下定義以免混淆,即,基于Junit,類(lèi)與代碼級(jí)別的,與運(yùn)行時(shí)無(wú)關(guān)的白盒測(cè)試。
2.我的理解
測(cè)試覆蓋率應(yīng)該區(qū)分自動(dòng)化測(cè)試覆蓋率和功能測(cè)試用例覆蓋率。
對(duì)于自動(dòng)化測(cè)試覆蓋率,應(yīng)是=(自動(dòng)化測(cè)試腳本執(zhí)行過(guò)的代碼/總代碼)
對(duì)于測(cè)試用例覆蓋率,應(yīng)是=(測(cè)試用例覆蓋的功能點(diǎn)/產(chǎn)品設(shè)計(jì)的所有功能點(diǎn))
3.什么是單元測(cè)試
單元測(cè)試是開(kāi)發(fā)者編寫(xiě)的一小段代碼,用于檢驗(yàn)被測(cè)代碼的一個(gè)很小的、很明確的功能是否正確,通常而言,一個(gè)單元測(cè)試是用于判斷某個(gè)特定條件(或者場(chǎng)景)下某個(gè)特定函數(shù)的行為。
3.1好處
1,單元測(cè)試不但會(huì)使你的工作完成得更輕松。而且會(huì)令你的設(shè)計(jì)會(huì)變得更好,甚至大大減少你花在調(diào)試上面的時(shí)間
2,提高代碼質(zhì)量
3,減少bug,快速定位bug
4,放心地修改、重構(gòu)
5,顯得專(zhuān)業(yè)(玩笑話(huà))
3.2注意
1,不能只測(cè)試一條正確執(zhí)行路徑,要考慮到所有可能的情況
2,要確保所有測(cè)試都能夠通過(guò),避免間接損害
3,如果一個(gè)函數(shù)復(fù)雜到無(wú)法單測(cè),那就說(shuō)明模塊的抽象有問(wèn)題
(1)語(yǔ)句覆蓋法
(2)分支覆蓋法
(3)條件覆蓋法
(4)組合條件覆蓋法
4.IDEA 單元測(cè)試覆蓋技巧
package com.example.demoo.junit;
/**
* Created by lanxinghua on 2018/7/26.
*/
public class Myclass {
public String test1(){
return "test1!";
}
public String test2(){
return "test2";
}
}
package com.example.demoo;
import com.example.demoo.junit.Myclass;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@SpringBootTest
public class JunitTest {
private Myclass myclass;
@Before
public void setUp() {
myclass = new Myclass();
}
@Test
public void testHello(){
myclass.test1();
}
}
1)啟動(dòng)單元測(cè)試覆蓋模式(Run “*” with Coverage)

2)查看代碼覆蓋率結(jié)果

工具欄按鈕:

3)生成代碼覆蓋率報(bào)告

在里面 生成覆蓋報(bào)告對(duì)話(huà)框打開(kāi),指定存儲(chǔ)生成的報(bào)告的目標(biāo)目錄,并且可選擇選中該復(fù)選框在瀏覽器中打開(kāi)生成的HTML。


擴(kuò)展
隨著公司的發(fā)展,自動(dòng)化測(cè)試腳本的持續(xù)集成逐漸要被做起來(lái),那就面臨一個(gè)自檢的問(wèn)題,我的測(cè)試腳本、測(cè)試用例是否全覆蓋了開(kāi)發(fā)的代碼。如何直觀地看到代碼覆蓋率?
本地統(tǒng)計(jì)代碼覆蓋率:jacoco,cobertura
遠(yuǎn)程統(tǒng)計(jì)代碼覆蓋率:jenkins上下載jacoco插件,并在構(gòu)建后配置
如果把測(cè)試工程(T)跟開(kāi)發(fā)工程(D)分開(kāi)為兩個(gè)獨(dú)立的工程,D部署在獨(dú)立的服務(wù)器上,T工程該如何遠(yuǎn)程獲取D的覆蓋率數(shù)據(jù)呢?
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
相關(guān)文章
spring data簡(jiǎn)化jpa開(kāi)發(fā)_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要介紹了spring data簡(jiǎn)化jpa開(kāi)發(fā),本文主要講述 Spring Data JPA,希望能夠深入學(xué)習(xí) Spring 和 JPA,有興趣的可以了解下2017-09-09
Java運(yùn)行時(shí)多態(tài)性的實(shí)現(xiàn)
Java運(yùn)行時(shí)多態(tài)性的實(shí)現(xiàn)...2006-12-12
java?hutool工具類(lèi)處理JSON的使用方法
hutool是一個(gè)java基礎(chǔ)工具類(lèi),該工具類(lèi)經(jīng)過(guò)長(zhǎng)期的發(fā)展,API已經(jīng)非常齊全,下面這篇文章主要給大家介紹了關(guān)于java?hutool工具類(lèi)處理JSON的使用方法,需要的朋友可以參考下2024-04-04
SpringBoot整合chatGPT的項(xiàng)目實(shí)踐
本文主要介紹了SpringBoot整合chatGPT的項(xiàng)目實(shí)踐,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03
Mybatis中實(shí)體類(lèi)屬性與數(shù)據(jù)列表間映射方法介紹
這篇文章主要介紹了Mybatis中實(shí)體類(lèi)屬性與數(shù)據(jù)列表間映射方法介紹,一共四中方法,供大家參考。2017-10-10
springboot整合redis修改分區(qū)的操作流程
這篇文章主要介紹了springboot整合redis修改分區(qū)的操作流程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07
簡(jiǎn)單實(shí)現(xiàn)java上傳圖片文件功能
這篇文章主要教大家如何簡(jiǎn)單實(shí)現(xiàn)java上傳圖片文件功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01
springboot實(shí)現(xiàn)異步任務(wù)
這篇文章主要為大家詳細(xì)介紹了springboot實(shí)現(xiàn)異步任務(wù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-05-05

