首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> J2ME

J2ME 單元測試實戰:J2MEUnit 框架從入門到自動化

     編輯:J2ME

為什麼 J2ME 需要專用測試框架?

標準 JUnit 依賴 Reflection(反射) 自動發現並執行測試方法,但 CLDC/MIDP 環境不提供 Reflection API。J2MEUnit (17KB) 由 Kent Beck & Erich Gamma 移植,引入「手動 Suite 組裝 + TestMethod 回調」機制,填補了單元測試空白。

環境搭建

  1. 下載 J2MEUnit 1.1.1 並解壓
  2. Eclipse + EclipseME 專案 → Properties → Java Build Path → Libraries → Add External JARs 選中 J2MEUnit.jar

核心編程模型

1. TestCase 子類結構


public class TestOne extends TestCase {
    // 必須提供帶參構造器(框架反射替代品)
    public TestOne(String sTestName, TestMethod rTestMethod) {
        super(sTestName, rTestMethod);
    }

    // 可選:setUp/tearDown
    protected void setUp() { /* 初始化資源 */ }
    protected void tearDown() { /* 釋放資源 */ }

    // 測試方法命名慣例以 test 開頭
    public void testOne() {
        System.out.println("TestOne.testOne()");
        assertTrue("Should be true", false);  // 故意失敗示範
    }

    public void testTwo() {
        System.out.println("TestOne.testTwo()");
        throw new RuntimeException("Exception");
    }

    // 關鍵:手動組裝 Suite
    public Test suite() {
        TestSuite aSuite = new TestSuite();
        // 匿名內部類綁定單一測試方法
        aSuite.addTest(new TestOne("testOne", new TestMethod() {
            public void run(TestCase tc) { ((TestOne)tc).testOne(); }
        }));
        aSuite.addTest(new TestOne("testTwo", new TestMethod() {
            public void run(TestCase tc) { ((TestOne)tc).testTwo(); }
        }));
        return aSuite;
    }
}

2. 設計鐵律:一個 TestCase 只綁定一個 TestMethod

若在單一 run() 中連續調用多個測試,前者失敗會導致後者不執行,且無法精準定位錯誤。老老實實寫 suite(),一個測試一個 TestCase 實例。

3. 聚合測試套件


public class TestAll extends TestCase {
    public Test suite() {
        TestSuite suite = new TestSuite();
        suite.addTest(new TestOne().suite());
        suite.addTest(new TestTwo().suite());
        return suite;
    }
}

兩種運行模式

模式適用場景啟動方式
TextUI 桌面開發機、CI 自動化 TestRunner.main(new String[]{"pkg.TestAll"})
MIDletUI 真機/模擬器實測 繼承 J2MEUnit.midletui.TestRunner,start(new String[]{"pkg.TestAll"})

MIDletUI 更迷人:真機上跑單測,極大降低測試成本。也可在 JAD 增加 J2MEUnitTestClasses 屬性列出測試類,無需修改主類。

最佳實踐清單

  • ✅ 每個公開方法對應一個 testXxx(),邊界條件、異常路徑全覆蓋
  • ✅ setUp() 初始化 Mock 物件,tearDown() 釋放 RMS/網絡資源
  • ✅ 使用 assertEquals(expected, actual, msg) 而非單純 assertTrue,失敗訊息更可讀
  • ✅ CI 整合:Ant 腳本調用 TextUI 模式,生成 XML 報表供 Jenkins 解析
  • ✅ 真機回歸:發布前在目標機型跑 MIDletUI,驗證 RMS 配額、網絡超時等真實環境行為

結語

J2MEUnit 雖缺反射帶來的便利,但以 17KB 體積換來可在真機跑自動化單測的能力,對嵌入式開發極具價值。將單測納入日常流程,能在早期攔截 70% 以上邏輯 Bug,是 J2ME 專案質量的基石。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved