金字塔測試原理:寫好單元測試的8個小技巧,一文總結
想必金字塔測試原理大家已經很熟悉了,近年來的測試驅動開放在各個公司開始盛行,測試程式碼先寫的倡議被反覆提及。
鑑於此,許多中大型軟體公司對單元測試的要求也逐漸提高。那麼,編寫單元測試有哪些小技巧可以借鑑和學習的呢? 加我VX:atstudy-js 回覆“測試”,進入 自動化測試學習交流群~~
測試程式碼檔案路徑與開發程式碼檔案路徑“相同”
這裡的“相同”並不是完全意義的一摸一樣,測試程式碼和開發程式碼處於同一目錄,而是指的測試程式碼檔案路徑你與開發程式碼檔案路徑“大體相同”。
如下圖1、2所示,開發程式碼路徑和測試程式碼路徑都包括/java/ru/yandex/clickhouse/。
圖1 開發程式碼路徑
圖2 測試程式碼路徑
測試程式碼檔名清晰
清晰的測試程式碼檔名可以幫助閱讀測試程式碼的其他人員對該檔案的測試內容有很好的初步認識。
例如上圖2所示:測試程式碼檔案ClickHouseConnectionTest.java,從命名上就可以幫助閱讀人員獲悉該測試程式碼檔案是針對ClickHouseConnection.java的測試。
清楚地命名單元測試名稱
不要擔心名字過長,一個長而完整的名稱可以讓您立即知道哪個測試失敗了,以及該測試到底想做什麼。
長時間命名的測試也可以記錄你的測試。如下圖3所示:從testMaxMemoryUsage()名稱就可以看出該測試程式碼是針對最大記憶體使用量地測試。顯而易見,該名稱遠遠好於test1()、test()2……
圖3 單元測試名稱樣例
一次測試一項
同整合測試、系統測試原則一致,測試用例應該保持“專有性”原則,即每次測試只針對一個功能進行測試。
如下圖4所示:都是針對clickhouse進行配置,然後發起查詢的功能,但圖上方主要是針對最大執行事件設定的測試,圖下方是針對最大記憶體使用量設定的測試。
圖4 單元測試“專有性”樣例
測試保持獨立性
測試保持獨立性指的是不同測試用例/程式碼塊之間不應該存在依賴(如:test2()的程式碼依賴test1()中的引數設定),每一個測試用例/程式碼塊應該能獨立執行。
鑑於此,我們可以把一些通用性配置(如資料庫初始化)提取到測試套件/程式碼檔案初始化環節。
清晰地丟擲測試失敗地異常
測試用例/程式碼並不能保證每次執行都能成功(如開發程式碼進行重構或功能變動引起地測試程式碼失敗),因此在編寫測試程式碼時需要捕獲失敗時的異常,並清晰地返回。
例如:若使用Integer aa=1;Integer bb=2;Assert.assertTrue(aa==bb);程式碼判斷變數aa和bb是否相等,若不相等時只會判定失敗而不會有詳細錯誤資訊。
若改為Assert.assertEquals(aa, bb);則會在失敗時返回類似的Expected 1, but the actual result was 2的資訊,這樣的錯誤資訊更有價值。
不要執著於測試覆蓋率
談到單元測試,就會想到測試覆蓋率。測試覆蓋率主要指的是程式碼路徑覆蓋率和分支覆蓋率。
在編寫單元測試時難免會陷入一味追求100%測試覆蓋率的陷阱。100%測試覆蓋率是一個很難實現的願景,100% 的覆蓋率並不意味著你已經覆蓋了所有的邊緣情況,它只是意味著所有的程式碼路徑都被執行了。
在實際測試過程中,我們應該關注的是測試功能是否覆蓋而不是單元程式碼路徑是否被全部覆蓋。例如:對於具有相同程式碼的檔案(同一程式碼塊複製貼上),追求100%的測試覆蓋率會導致測試冗餘。
因此,我們應該從保障功能正常的角度出發編寫單元測試用例,而不是針對每個單元函式編寫單元測試用例。
那麼,如何從功能的角度出發編寫單元測試用例呢?最簡單的一點就是檢視被呼叫的函式模組。
若某個模組被上層功能函式呼叫,那麼這個模組就需要我們編寫單元測試用例進行守護。
最好有註釋
註釋可以幫助其他閱讀程式碼的人員更快地理解程式碼,單元測試也是程式碼,因此養成註釋地習慣可以提高你編寫程式碼的素養。
適當地給單元測試用例分類,提高執行效率
單元測試用例和整合測試用例、系統測試用例一樣,當測試用例數量變得很大時,每次修改部分程式碼執行所有的單元測試用例顯得累贅。
這個時候如果你的單元測試用例有明確的分類,那麼就能提高執行效率。
如下圖5所示:該單元測試標籤為”unit”,在執行時可以根據“unit”標籤選中該單元測試用例。
圖5 單元測試標籤樣例
上述單元測試小技巧,希望能幫助各位單元測試初學者。
最後:
可以到我的個人V:atstudy-js,可以免費領取一份10G軟體測試工程師面試寶典文件資料。以及相對應的影片學習教程免費分享!其中包括了有基礎知識、Linux必備、Mysql資料庫、抓包工具、介面測試工具、測試進階-Python程式設計、Web自動化測試、APP自動化測試、介面自動化測試、測試高階持續整合、測試架構開發測試框架、效能測試等。
這些測試資料,對於做【軟體測試】的朋友來說應該是最全面最完整的備戰倉庫,這個倉庫也陪伴我走過了最艱難的路程,希望也能幫助到你!
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31407649/viewspace-2899511/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 編寫更好的 Java 單元測試的 7 個技巧Java
- 單元測試:單元測試中的mockMock
- 測試 之Java單元測試、Android單元測試JavaAndroid
- 如何寫好測試用例以及go單元測試工具testify簡單介紹Go
- JavaScript單元測試及原理JavaScript
- 編寫你的第一個 Android 單元測試Android
- Java單元測試技巧之PowerMockJavaMock
- 如何編寫優秀的測試程式碼|單元測試
- 如何用 JavaScript 編寫你的第一個單元測試JavaScript
- 軟體測試基礎 (一): 單元測試
- 軟體測試基礎 (一):單元測試
- Django單元測試(一)Django
- 測試開發之單元測試-禪道結合ZTF驅動單元測試執行
- 前端單元測試總結及測試工具介紹前端
- 前端測試:Part II (單元測試)前端
- Spring Boot之DAO層的單元測試小結Spring Boot
- Java單元測試常用工具類小結Java
- (一) 初探 iOS 單元測試iOS
- Android單元測試-對Activity的測試Android
- Android單元測試-對View的測試AndroidView
- Junit 單元測試使用總結
- Angular8單元測試示例指南Angular
- Flutter 學習之路 - 測試(單元測試,Widget 測試,整合測試)Flutter
- 如何用googletest寫單元測試Go
- 用Junit Framework編寫單元測試Framework
- 首次在WebAPI中寫單元測試WebAPI
- [iOS單元測試系列]單元測試編碼規範iOS
- 單元測試 - 測試場景記錄
- Go 單元測試之mock介面測試GoMock
- 測試氣味-整潔單元測試
- Flutter 單元測試Flutter
- Go單元測試Go
- 單元測試工具
- iOS 單元測試iOS
- 前端單元測試前端
- golang 單元測試Golang
- PHP 單元測試PHP
- phpunit單元測試PHP