那年追過的開發者測試工具

jackieathome發表於2024-08-10

交付進度緊張,為什麼還要花費精力寫單元測試程式碼,如下是之前的筆記。

  • 寫單元測試程式碼有什麼好處
  • 為什麼程式設計師討厭寫單元測試程式碼

工欲善其事,必先利其器。使用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

相關文章