測試類別應具的基本特性

測試程式碼覆蓋率的高低,無法真實表示單元測試的品質:因為這些工具,並不會考慮測試程式是否有足以驗證程式正確性的斷言。但是撰寫底層工具元件(如UDE)、或是以TDD開發專案時,還是會盡可能追求100%的有效(有斷言的)覆蓋率,以突顯確實未測試到的邏輯部分。

許多類別有一些共通特性,若要逐一撰寫測試,會花費許多精力。部分情境,像是ENUM,有一些分支情況需要用特殊的技巧才能執行到。UDE-Testkit包裝了幾個方法,可以一次完成這些共用特性的測試。

GeneralCoverageUtils.doGeneralCoverage

doGeneralCoverage() 會測試一些Java Object 的基本條款,如hashcode()、equals()必須同時定義、clone method 測試。每一個專案,可以固定新增測試程式如下:UDECoverageTest

/**
 * 只為補充基本 工具類別 / Constructor / Enumeration / JavaBean的覆蓋率,以便看 coverage report時,找到其它應完成測試的部分。
 */
public class UDECoverageTest {
    @Rule
    public TestInfo testInfo = new TestInfo();
    @Test
    public void test() {
        GeneralCoverageUtils.doGeneralCoverage(this.testInfo.getTestClass());
    }
}

測試對象為靜態工具類別

若 Class 有加上@UtilityClassAssertion,doGeneralCoverage 會增加驗證以下特性:

  • 宣告為final class、
  • 只有public static method、
  • 建構子為private並且會抛出AssertionError。
// 標準工具類別範本
@UtilityClassAssertion
public final class UdeResourceUtils {
    private UdeResourceUtils() {
        throw new AssertionError();
    }
}

測試對象為JavaBean

  • 驗證getter / setter 是否為對等操作,即設定一個值後,getter是否會取回相同物件。
  • 如果 accessor 有做額外處理的類別,就應該要另行撰寫測試。

results matching ""

    No results matching ""