摘要:?jiǎn)卧獪y(cè)試框架作為的標(biāo)準(zhǔn)庫(kù),是其他單元測(cè)試框架的基礎(chǔ)。可以和和配合使用編寫(xiě)單元測(cè)試。官網(wǎng)地址單元測(cè)試覆蓋率工具單元測(cè)試中還需要用到代碼覆蓋率工具。代碼覆蓋率統(tǒng)計(jì)工具用來(lái)發(fā)現(xiàn)沒(méi)有被測(cè)試覆蓋的代碼,完善單元測(cè)試的覆蓋率。
在應(yīng)用程序中,單元是具有一個(gè)或多個(gè)輸入和單個(gè)輸出的軟件中最小可測(cè)試部分。單元測(cè)試是一種測(cè)試軟件代碼單元的方法,通常包括一個(gè)或兩個(gè)輸入,產(chǎn)生一個(gè)輸出。單元測(cè)試主要關(guān)注獨(dú)立模塊的功能正確性,目的是確保每個(gè)單元都按照預(yù)期的方式運(yùn)行。
要進(jìn)行單元測(cè)試,開(kāi)發(fā)人員需要編寫(xiě)測(cè)試代碼。單元測(cè)試有手動(dòng)和自動(dòng)化測(cè)試兩種類(lèi)型,自動(dòng)化通常是首選的方法,可以為開(kāi)發(fā)人員節(jié)省大量的時(shí)間和精力。
單元測(cè)試是自動(dòng)化測(cè)試金字塔模型中占比最大的測(cè)試類(lèi)型,做好單元測(cè)試對(duì)于保證軟件產(chǎn)品的質(zhì)量非常重要,單元測(cè)試可以:
及早發(fā)現(xiàn)軟件中的缺陷并及早修復(fù)
修復(fù)單元測(cè)試發(fā)現(xiàn)的缺陷時(shí),代碼更改不會(huì)影響其他模塊
模塊集成變得更容易
減少缺陷率和時(shí)間成本
現(xiàn)在讓我們來(lái)總結(jié)一下針對(duì)Java、C++和Python語(yǔ)言的單元測(cè)試中,受歡迎的測(cè)試工具,它們不僅包括單元測(cè)試框架,還包括了Mock工具、代碼覆蓋率工具,以及兩個(gè)智能化的單元測(cè)試用例自動(dòng)生成工具:
Junit
TestNG
GoogleTest
pytest
unittest
Jmockit
JaCoCo
gcov、lcov、gcovr
Coverage.py
EvoSuite
Diffblue Cover
單元測(cè)試框架
當(dāng)前成熟的單元測(cè)試框架包括:JUnit、TestNG、gtest、pytest、unittest。
1)JUnit
JUnit是一個(gè)為Java編程語(yǔ)言設(shè)計(jì)的開(kāi)源單元測(cè)試框架,由 Kent Beck 和 Erich Gamma建立,它是單元測(cè)試框架家族中的一個(gè),這些框架被統(tǒng)稱(chēng)為xUnit,JUnit是xUnit 家族中最為成功的一個(gè)。JUnit 有它自己的 Junit 擴(kuò)展生態(tài)圈,多數(shù) Java 的開(kāi)發(fā)環(huán)境都已經(jīng)集成了 JUnit 作為單元測(cè)試的工具。JUnit 的最新版本是JUnit 5,它不再是一個(gè)單一的JAR 包,而是由JUnit platform(平臺(tái))、JUnit Jupiter 和JUnit Vintage 這3 部分組成。
官網(wǎng)地址:https://junit.org/junit5/
2)TestNG
TestNG 是另一個(gè)為Java編程語(yǔ)言設(shè)計(jì)的開(kāi)源單元測(cè)試框架,是一個(gè)受JUnit和NUnit啟發(fā)而來(lái)的測(cè)試框架,但它引入了一些新功能,使其更強(qiáng)大、更容易使用,例如:
核心特性是多線(xiàn)程測(cè)試執(zhí)行,測(cè)試代碼是否是多線(xiàn)程安全的;
提供注釋支持;
支持?jǐn)?shù)據(jù)驅(qū)動(dòng)測(cè)試(使用@DataProvider);
支持參數(shù)化測(cè)試;
強(qiáng)大的執(zhí)行模型(不再有TestSuite);
支持各種工具和插件(Eclipse, IDEA, Maven等…);
嵌入BeanShell以獲得更多的靈活性;
用于運(yùn)行時(shí)和日志記錄的默認(rèn)JDK函數(shù)(沒(méi)有依賴(lài)關(guān)系)。
官網(wǎng)地址:https://testng.org/
3)GoogleTest
GoogleTest是一個(gè)跨平臺(tái)的(Liunx、Mac OS X、Windows 、Cygwin 、Windows CE and Symbian ) C++單元測(cè)試框架,由google公司發(fā)布,為在不同平臺(tái)上為編寫(xiě)C++測(cè)試而開(kāi)發(fā)的。它提供了豐富的斷言、致命和非致命判斷、參數(shù)化、”死亡測(cè)試”等等。例如:
測(cè)試用例本身就是一個(gè)exe工程,編譯之后可以直接運(yùn)行,非常的方便。
編寫(xiě)測(cè)試案例變的非常簡(jiǎn)單(使用一些簡(jiǎn)單的宏如TEST),讓我們將更多精力花在測(cè)試用例設(shè)計(jì)上。
?提供了強(qiáng)大豐富的斷言的宏,用于對(duì)各種不同檢查點(diǎn)的檢查。
?提高了豐富的命令行參數(shù)對(duì)腳本運(yùn)行進(jìn)行一系列的設(shè)置。
代碼開(kāi)源地址:https://github.com/google/googletest
4)pytest
pytest是一個(gè)非常成熟的全功能的支持Python語(yǔ)言的單元自動(dòng)化測(cè)試框架。簡(jiǎn)單靈活,容易上手,支持參數(shù)化;能夠支持簡(jiǎn)單的單元測(cè)試和復(fù)雜的功能測(cè)試,還可以用來(lái)做selenium/appnium等自動(dòng)化測(cè)試,以及接口自動(dòng)化測(cè)試(pytest集成requests)。
官網(wǎng)地址:http://pytest.org/
5)unittest
unittest 是 Python 自帶的一個(gè)單元測(cè)試框架,無(wú)需安裝,使用簡(jiǎn)便,引入包 import unittest 即可使用。unittest單元測(cè)試框架作為python的標(biāo)準(zhǔn)庫(kù),是其他單元測(cè)試框架的基礎(chǔ)。
官網(wǎng)地址:http://docs.python.org/zh-cn/3/library/unittest.html
單元測(cè)試Mock工具
在進(jìn)行單元測(cè)試時(shí),需要測(cè)試的類(lèi)有很多依賴(lài),這些依賴(lài)的類(lèi)或者資源又會(huì)有依賴(lài),導(dǎo)致在單元測(cè)試代碼里無(wú)法完成構(gòu)建。因此,我們需要采用Mock 技術(shù)隔離依賴(lài)對(duì)象,即模擬這些需要構(gòu)建的類(lèi)或者資源,提供給需要測(cè)試的對(duì)象使用。
6)JMockit
JMockit是一個(gè)用于Java語(yǔ)言單元測(cè)試的開(kāi)源Mock工具,包含了工具和API集合。Jmockit可以和junit和TestNG配合使用編寫(xiě)單元測(cè)試。
JMockit支持類(lèi)級(jí)別整體mock和部分方法重寫(xiě),以及實(shí)例級(jí)別整體mock和部分mock,可以mock靜態(tài)方法、私有變量及局部方法。
這個(gè)工具還具有統(tǒng)計(jì)單元測(cè)試代碼覆蓋率的功能,提供了三種類(lèi)型的代碼覆蓋率,如行覆蓋率、路徑覆蓋率和數(shù)據(jù)覆蓋率。
官網(wǎng)地址:http://jmockit.org/
單元測(cè)試覆蓋率工具
單元測(cè)試中還需要用到代碼覆蓋率工具。代碼覆蓋率是用來(lái)度量在單元測(cè)試過(guò)程中被覆蓋代碼的指標(biāo)。代碼覆蓋率統(tǒng)計(jì)工具用來(lái)發(fā)現(xiàn)沒(méi)有被測(cè)試覆蓋的代碼,完善單元測(cè)試的覆蓋率。另外,這類(lèi)工具還可以用來(lái)構(gòu)建代碼調(diào)用關(guān)系,精準(zhǔn)的確定回歸測(cè)試范圍,避免全量回歸造成測(cè)試資源的浪費(fèi)。
7)JCoCo
Jacoco是一個(gè)開(kāi)源的免費(fèi)Java代碼覆蓋工具,由EclEmma創(chuàng)建,其使用方法很靈活,可以嵌入到Ant、Maven中;可以作為Eclipse插件,可以使用其Java Agent技術(shù)監(jiān)控Java程序等等。很多第三方的工具提供了對(duì)JaCoCo的集成,如sonar、Jenkins等。
JaCoCo包含了多種尺度的覆蓋率計(jì)數(shù)器:
指令級(jí)覆蓋(Instructions,C0coverage)
分支(Branches,C1coverage)
圈復(fù)雜度(CyclomaticComplexity)
行覆蓋(Lines)
方法覆蓋(non-abstract methods)
類(lèi)覆蓋(classes)
官網(wǎng)地址:https://www.jacoco.org/jacoco/
8)gcov、lcov、gcovr
gcov、lcov、gcovr都是支持C/C++語(yǔ)言代碼覆蓋率的工具。
gcov是由gcc內(nèi)建的代碼覆蓋率生成工具,可以很方便的和GCC編譯器配合使用,通常情況下,直接安裝gcc工具鏈,也就同時(shí)包含了gcov命令行工具。gcov得到的結(jié)果是文本形式的,而且不同的源碼文件需要一一執(zhí)行g(shù)cov命令,對(duì)于大工程是不方便的,這時(shí)就需要lcov。
lcov是gcov工具的圖形前端,收集多個(gè)源文件的gcov數(shù)據(jù),生成描述覆蓋率的HTML頁(yè)面。生成的結(jié)果中會(huì)包含概述頁(yè)面,方便瀏覽。
一般場(chǎng)景下使用gcov和lcov能滿(mǎn)足代碼覆蓋率的獲取和展示工作,lcov和genhtml配合生成的HTML報(bào)告內(nèi)容詳盡,簡(jiǎn)潔直觀(guān),行覆蓋率、分支覆蓋率都有,但是HTML文件在常用的持續(xù)集成工具(比如Jenkins、gitlab-ci)中均無(wú)法集成,因此我們需要其他的工具用于覆蓋率結(jié)果的持續(xù)集成展示。gcovr是一款針對(duì)C/C++代碼覆蓋率并支持以多種方式(包括列表方式、XML文件方式、HTML網(wǎng)頁(yè)方式等)展示出來(lái)的工具,而XML文件剛好是可以被持續(xù)集成工具解析的。
lcov下載地址:https://github.com/linux-test-project/lcov
gcovr下載地址:https://github.com/gcovr/gcovr
9)Coverage.py
Coverage.py是一個(gè)度量Python語(yǔ)言代碼覆蓋率的工具。Coverage.py可以指定要通過(guò)配置文件分析哪些源文件,通過(guò)分析源代碼,發(fā)現(xiàn)沒(méi)有被測(cè)試覆蓋的代碼。
官網(wǎng)地址:https://coverage.readthedocs.io
智能化的單元測(cè)試用例自動(dòng)生成工具
單元測(cè)試的重要性毋庸置疑,但是在很多企業(yè)推行的并不好,一個(gè)非常重要的原因是開(kāi)發(fā)人員不愿意把時(shí)間花費(fèi)在編寫(xiě)單元測(cè)試代碼上。如今,有兩個(gè)值得推薦的智能化工具可以自動(dòng)生成單元測(cè)試用例,幫助提高單元測(cè)試的覆蓋率,提高企業(yè)的研發(fā)效能。
10)EvoSuite
EvoSuite是由英國(guó)Sheffield(謝菲爾德)等大學(xué)聯(lián)合開(kāi)發(fā)的一種開(kāi)源工具,用于自動(dòng)生成測(cè)試用例集,生成的測(cè)試用例均符合Junit的標(biāo)準(zhǔn),可直接在Junit中運(yùn)行,并得到了Google和Yourkit的支持。通過(guò)使用此自動(dòng)測(cè)試工具能夠在保證代碼覆蓋率的前提下極大地提高測(cè)試人員的開(kāi)發(fā)效率。但是只能輔助測(cè)試,并不能完全取代人工,測(cè)試用例的正確與否還需人工判斷。
官網(wǎng)地址:https://www.evosuite.org/
開(kāi)源代碼地址:https://github.com/EvoSuite/evosuite
11)DiffBlue?Cover
Diffblue Cover是一個(gè)自動(dòng)化的單元測(cè)試編寫(xiě)工具,通過(guò)分析Java應(yīng)用程序編寫(xiě)反映當(dāng)前行為的單元測(cè)試,提高測(cè)試覆蓋率,并幫助開(kāi)發(fā)人員在將來(lái)的代碼更改中發(fā)現(xiàn)回歸缺陷。
插件開(kāi)源社區(qū)版地址:https://plugins.jetbrains.com/plugin/14946-diffblue-cover--community-edition/versions
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/125022.html
摘要:另外一些單元測(cè)試可能會(huì)測(cè)試負(fù)向路徑的場(chǎng)景,保證代碼不僅會(huì)產(chǎn)生錯(cuò)誤,而且是預(yù)期的錯(cuò)誤。是一個(gè)面向程序員的測(cè)試框架,這是一個(gè)的體系結(jié)構(gòu)的單元測(cè)試框架。 本系列教程所有的PHPUnit測(cè)試基于PHPUnit6.5.9版本,Lumen 5.5框架 前置 日常我們的普通用到的測(cè)試: 代碼直接echo,debug等方法測(cè)試 -> 跟蹤細(xì)節(jié)斷點(diǎn)型測(cè)試 log日志輔助測(cè)試 -> 跟蹤細(xì)節(jié)斷點(diǎn)型測(cè)試 ...
摘要:另外一些單元測(cè)試可能會(huì)測(cè)試負(fù)向路徑的場(chǎng)景,保證代碼不僅會(huì)產(chǎn)生錯(cuò)誤,而且是預(yù)期的錯(cuò)誤。是一個(gè)面向程序員的測(cè)試框架,這是一個(gè)的體系結(jié)構(gòu)的單元測(cè)試框架。 本系列教程所有的PHPUnit測(cè)試基于PHPUnit6.5.9版本,Lumen 5.5框架 前置 日常我們的普通用到的測(cè)試: 代碼直接echo,debug等方法測(cè)試 -> 跟蹤細(xì)節(jié)斷點(diǎn)型測(cè)試 log日志輔助測(cè)試 -> 跟蹤細(xì)節(jié)斷點(diǎn)型測(cè)試 ...
摘要:是一個(gè)相對(duì)比較新的微服務(wù)框架,年才推出的版本雖然時(shí)間最短但是相比等框架提供的全套的分布式系統(tǒng)解決方案。提供線(xiàn)程池不同的服務(wù)走不同的線(xiàn)程池,實(shí)現(xiàn)了不同服務(wù)調(diào)用的隔離,避免了服務(wù)器雪崩的問(wèn)題。通過(guò)互相注冊(cè)的方式來(lái)進(jìn)行消息同步和保證高可用。 Spring Cloud 是一個(gè)相對(duì)比較新的微服務(wù)框架,...
摘要:與此同時(shí),因新冠疫情的影響使得用戶(hù)對(duì)移動(dòng)應(yīng)用程序的需求激增。調(diào)查報(bào)告顯示年移動(dòng)應(yīng)用程序已經(jīng)產(chǎn)生了億美元的收入,預(yù)計(jì)到年將產(chǎn)生億美元的收入。 引言 計(jì)劃在2021年進(jìn)...
閱讀 3779·2021-11-25 09:43
閱讀 2198·2021-11-23 10:13
閱讀 831·2021-11-16 11:44
閱讀 2378·2019-08-29 17:24
閱讀 1391·2019-08-29 17:17
閱讀 3485·2019-08-29 11:30
閱讀 2589·2019-08-26 13:23
閱讀 2349·2019-08-26 12:10