我不使用TDD:實用的Java測試方法

我們正在打造一款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