我們正在打造一款Google Photos的複製品,而測試工作實在是難上加難!
我們該如何驗證我們的Java應用程式是否正確啟動了ImageMagick處理程序,或者生成的縮圖是否正確無誤,確實是縮圖而非隨機的貓咪圖片呢?又該如何測試不同版本的ImageMagick及各種作業系統?
影片內容概覽
00:00 引言
影片開始,我們將概述為何測試我們的Google Photos複製品如此棘手。正如上一集所述,我們已開始從圖像中提取縮圖,但現在我們需要一種方法來進行測試。由於這是通過外部ImageMagick程序完成的,我們將面臨一段挑戰之旅。
01:05 設置JUnit並編寫第一個測試方法
首先,我們將設置JUnit 5。由於我們並未使用Spring Boot這樣的框架,這將是一個很好的練習,添加最小的庫集合和配置,讓我們能夠快速開始使用JUnit。此外,我們將編寫一些測試方法骨架,同時思考如何處理現有代碼的測試,以及如何命名測試方法等。
04:19 實現ImageMagick版本檢測
在上集節目中,我們發現在不同系統上運行Java應用程式會導致意外的結果或直接錯誤。這是因為不同的ImageMagick版本提供了我們需要呼叫的不同API集。因此,我們需要調整程式碼以偵測已安裝的ImageMagick版本,並且添加一個測試方法,確認在運行任何測試之前ImageMagick確實已安裝,在運行任何測試之前。
10:32 測試權衡
正如偵測ImageMagick版本所示,真正的問題是為了達到各種操作系統和已安裝ImageMagick版本的100%測試覆蓋率,你需要一個相當複雜的CI/CD設置,而這不在本項目的範疇內。因此,我們正在討論我們方法的利弊。
12:00 實作@EnabledIfImageMagickIsInstalled
然而,我們可以做的是確保我們的其餘測試套件僅在ImageMagick已安裝的情況下運行。因此,我們將編寫一個自定義的JUnit 5註解,稱為EnabledIfImageMagickIsInstalled
,你可以在任何測試方法或甚至整個類別上添加此註解以啟用此行為。如果ImageMagick未安裝,測試將簡單地不運行,而不是顯示一個醜陋的錯誤訊息。
16:05 成功創建縮略圖的測試
最大的問題是:如何確保縮略圖正確生成?我們將通過檢查ImageMagick的退出代碼、估算文件大小、加載圖像並確保其具有正確的像素數量來解決這個問題。這一切都在AssertJ及其SoftAssertions的幫助下,輕鬆地將多個斷言組合成一個。
23:59 仍然只在我的機器上工作
即使測試了我們的整個工作流程,我們仍需確保針對不同版本的ImageMagick調用不同的API。我們可以快速添加此行為以支持IM6和IM7,這樣就完成了。
25:53 部署
是時候將應用程序部署到我的NAS上了。這次,一切如預期般運作!
26:20 最終測試思考
在本集中,我們進行了相當多的測試。讓我們總結一下學到的所有挑戰和務實的測試策略。
27:31 接下來是什麼
我們將通過查看接下來的內容來結束本集:多線程問題!
下集再見。
Source:
https://dzone.com/articles/i-dont-tdd-pragmatic-testing-with-java