天天看點

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:判斷兩個數組是否相等。