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