開發與維運

Java單元測試之 JUnit

引入maven依賴

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <scope>test</scope>
</dependency>

創建測試用例(建議以方法為單位編寫單元測試用例)

Demo.java

public class Demo {
 
    public String method() {
 
        return "This is a demo method.";
    }
}

DemoTest.java

import org.junit.Assert;
import org.junit.Test;
 
public class DemoTest {
 
    @Test
    public void method() throws Exception {
 
        Demo demo = new Demo();
 
        String result = demo.method();
 
        Assert.assertEquals(result, "This is a demo method.");
    }
}

Rule(規則)

JUnit4中包含兩個註解@Rule和@ClassRule用於修飾Field或返回Rule的 Method,Rule是一組實現了TestRule接口的共享類,提供了驗證、監視TestCase和外部資源管理等能力。JUnit提供了以下幾個Rule實現,必要時也可以自己實現Rule。

  • Verifier: 驗證測試執行結果的正確性。
  • ErrorCollector: 收集測試方法中出現的錯誤信息,測試不會中斷,如果有錯誤發生測試結束後會標記失敗。
  • ExpectedException: 提供靈活的異常驗證功能。
  • Timeout: 用於測試超時的Rule。
  • ExternalResource: 外部資源管理。
  • TemporaryFolder: 在JUnit的測試執行前後,創建和刪除新的臨時目錄。
  • TestWatcher: 監視測試方法生命週期的各個階段。
  • TestName: 在測試方法執行過程中提供獲取測試名字的能力。

簡單的說就是提供了測試用例執行過程中一些通用功能的共享的能力,使我們不必重複編寫一些功能類似的代碼。JUnit用於標註Rule的註解包括@Rule和@ClassRule,區別在於作用域不同@Rule的作用域是測試方法,@ClassRule則是測試Class。

Assume(假設)

Assume直譯為假設,是JUnit提供的一套用於判斷測試用例的入參是否有業務含義的工具,如果入參不符合預期時會拋出AssumptionViolatedException,默認的BlockJUnit4ClassRunner及其子類會捕獲這個異常並跳過當前測試,如果使用自定義的Runner則無法保證行為,視Runner的實現而定。 Assume提供的驗證方法包括:

  • assumeTrue/assumeFalse
  • assumeNotNull
  • assumeThat
  • assumeNoException

具體含義都比較簡單。

Assert(斷言)

Assert是JUnit提供的斷言類,用於常用的測試結果驗證。提供的功能和方法都比較簡單實用,這裡只用列表簡單介紹:

  • assertTrue、assertFalse:結果的true、false。
  • assertThat:使用Matcher做自定義的校驗。
  • assertEquals、assertNotEquals:判斷兩個對象是否相等。
  • assertNull、assertNotNull:判斷對象是否為空。
  • assertSame:判斷兩個對象是否為同一個,不同於equals這裡是使用“==”判斷。
  • assertArrayEquals:判斷兩個數組是否相等。

Leave a Reply

Your email address will not be published. Required fields are marked *