交付進度緊張,為什麼還要花費精力寫單元測試程式碼,如下是之前的筆記。
- 寫單元測試程式碼有什麼好處
- 為什麼程式設計師討厭寫單元測試程式碼
工欲善其事,必先利其器。使用Java語言交付專案時,需要掌握單元測試框架和Mock工具的使用。
如下是當年交付專案過程中,使用過的測試框架和工具,可供參考。
JUnit
測試用例的開發框架,從JUnit3一直到JUnit4。
JUnit5釋出後,崗位的變化,在專案裡寫程式碼的機會不多,因此沒有太多使用經驗。
- 官網
- 社群主頁
A programmer-oriented testing framework for Java.
- junit5程式碼倉庫
The 5th major version of the programmer-friendly testing framework for Java and the JVM.
- JUnit5使用指導
- junit4程式碼倉庫
- Getting Started for JUnit4
- JUnit4 wiki
使用JUnit5時,修改專案的pom.xml
,增加如下配置:
<!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.10.3</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-engine -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.10.3</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.10.3</version>
<scope>test</scope>
</dependency>
使用JUnit4時,修改專案的pom.xml
,增加如下配置:
<!-- https://mvnrepository.com/artifact/junit/junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
參考資料
- 【軟體測試】單元測試工具---Junit詳解
- JUnit4 / JUnit 5 全面詳解【單元測試、Maven】
- 【軟體測試】JUnit詳解
- Java Junit單元測試(入門必看篇)
- 【軟體測試】JUnit 單元測試 基礎學習教程
- 自動化測試Junit
- Junit 單元測試(詳解)
EasyMock
當年作為骨幹參與祖傳專案的交付,使用EasyMock配合PowerMock,寫了很多單元測試,對於穩固產品質量,改善生活質量,非常有幫助。
-
官網
-
程式碼倉庫
EasyMock, makes mocking easier since 2001.
EasyMock is a Java library that provides an easy way to use Mock Objects in unit testing. -
Getting Started
-
使用指導
修改專案的pom.xml
,增加如下配置:
<!-- https://mvnrepository.com/artifact/org.easymock/easymock -->
<dependency>
<groupId>org.easymock</groupId>
<artifactId>easymock</artifactId>
<version>5.4.0</version>
<scope>test</scope>
</dependency>
參考資料
- 高效單元測試——EasyMock技術與應用
- EasyMock詳解
- EasyMock教程
- 開源 API 工具的 MOCK 功能真的好用麼?
PowerMock
對於老專案來說,靜態類滿天飛,PowerMock非常有用。
當年作為骨幹參與祖傳專案的交付,使用EasyMock配合PowerMock,寫了很多單元測試,對於穩固產品質量,改善生活質量,非常有幫助。
檢查提交記錄,發現最近的提交已在2022年2月24日。
除非有新的開發者加入,否則本專案短期內不會有新的進展。
-
官網
-
程式碼倉庫
PowerMock is a Java framework that allows you to unit test code normally regarded as untestable.
-
Is this project still alive?
I don't personally have time to maintain PowerMock anymore, and from what I understand from @thekingn0thing, the same is true for him. Is anyone else willing to move it forward? I'd be happy to give access etc if anyone is willing to do so.
依據帖子中作者@johanhaleby的上述答覆,短期內可能不會重啟專案的開發工作。
修改專案的pom.xml
,增加如下配置:
<!-- https://mvnrepository.com/artifact/org.powermock/powermock-module-junit4 -->
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-module-junit4</artifactId>
<version>2.0.9</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.powermock/powermock-core -->
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-core</artifactId>
<version>2.0.9</version>
<scope>test</scope>
</dependency>
官方文件
- Getting Started
- Downloads
- Motivation
- Javadoc
- EasyMock API extension (PowerMock class)
- Mockito API extension (PowerMockito class)
- Mockito2 API extension (PowerMockito class)
- PowerMock Reflect (Whitebox class)
- Common
- PowerMock Configuration
- Bypass Encapsulation
- Suppress Unwanted Behavior
- Test Listeners
- Mock Policies
- Mock system classes
- EasyMock
- Mockito
- TestNG
- Delegate to another JUnit Runner
- Bootstrap using a JUnit Rule
- Bootstrap using a Java Agent
- OSGi
- Release Notes
- FAQ
參考資料
- PowerMock註解PowerMockIgnore的使用方法
- PowerMock簡介及常見註解解釋
- PowerMock入門:Java單元測試的終極武器
- 單元測試——PowerMock總結
- PowerMock(一):PowerMock的基本使用
JMockit
剛入行的時候,隔壁專案組大規模應用本工具交付單元測試和整合測試程式碼,當時作為新手,除了哇塞,也不知道說啥好。
- 官方文件
修改專案的pom.xml
,增加如下配置:
<!-- https://mvnrepository.com/artifact/org.jmockit/jmockit -->
<dependency>
<groupId>org.jmockit</groupId>
<artifactId>jmockit</artifactId>
<version>1.49</version>
<scope>test</scope>
</dependency>
參考資料
- 不會測試的程式設計師不是好程式設計師(一文讓你掌握JMockit的使用)
- JAVA單元測試——JMockit教程
- Jmockit總結
- JMockit學習筆記
Mockito
曾經在一個專案中使用過,不過這個專案的生命週期比較短,所以積累不多。
-
官網
-
程式碼倉庫
Most popular Mocking framework for unit tests written in Java.
-
org.mockito.Mockito
修改專案的pom.xml
,增加如下配置:
<!-- https://mvnrepository.com/artifact/org.mockito/mockito-core -->
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>5.12.0</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mockito/mockito-junit-jupiter -->
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-junit-jupiter</artifactId>
<version>5.12.0</version>
<scope>test</scope>
</dependency>
參考資料
- 超詳細 springboot 整合 Mock 進行單元測試!本文帶你搞清楚!
- Mockito使用詳解
- Mockito 簡介
- Mockito和PowerMock用法
- 一文教會你mock(Mockito和PowerMock雙劍合璧)
- Mockito & PowerMock詳解
- Mockito和PowerMock用法
- Mockito和PowerMockito的使用
- Mockito與PowerMock的使用基礎教程
Cucumber
場景化測試、資料驅動測試,之前參與網路控制器的業務時,廣泛使用了本工具來開發單元測試和整合測試程式碼,非常方便。
-
官網
-
社群主頁
Cucumber is a tool for running automated acceptance tests, written in plain language.
-
程式碼倉庫
Cucumber for the JVM.
-
官方文件
修改專案的pom.xml
,增加如下配置:
<!-- https://mvnrepository.com/artifact/io.cucumber/cucumber-java -->
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-java</artifactId>
<version>7.18.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/io.cucumber/cucumber-junit -->
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-junit</artifactId>
<version>7.18.1</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/io.cucumber/cucumber-core -->
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-core</artifactId>
<version>7.18.1</version>
</dependency>
參考資料
- Cucumber結合junit5測試
- 記Cucumber行為驅動測試的簡單配置與使用方式
- Cucumber - junit 支援多執行緒
- 【Cucumber系列】Junit Test Runner和CucumberOptions