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

Feed4JUnit 實戰:實現 Java 單元測試數據與代碼分離

     編輯:Java 相關知識

業務邏輯中常見同一流程處理多組輸入(如登入驗證:用戶名/密碼長度、特殊字元限制)。傳統 JUnit 需為每組輸入編寫獨立測試方法,產生大量冗餘代碼,維護困難。JUnit 4 參數化測試雖支援多數據輸入,但數據硬編碼於代碼中,隨業務增減修改極不便。Feed4JUnit 作為 JUnit 擴展,完美解決數據與代碼分離,支援 CSV/Excel、資料庫、自定義數據源,極大提升測試編寫與維護效率。

基礎環境搭建

  1. 下載:SourceForge Feed4JUnit 最新版。
  2. 解壓,將 lib 目錄複製至 Java 專案根目錄。
    複製lib到專案根目錄
  3. 專案右鍵 Properties → Java Build Path → Add JARs,加入 lib 下所有 Jar。
    添加Jar到Build Path

測試類需匯入:org.databene.feed4junit.Feeder、org.databene.benerator.anno.Source、org.databene.benerator.anno.Database。

核心註解與代碼骨架

@RunWith(Feeder.class)
public class Feed4JSample {
    @Test
    @Source() // 聲明數據源
    public void testAccessCheck(String userName, String pw, boolean expected) {
        assertEquals(expected, UserAccess.accessCheck(userName, pw));
    }
}
  • @RunWith(Feeder.class):指定測試執行器。
  • @Test:標記測試方法。
  • @Source:聲明並接收數據源,參數按列順序映射到方法參數。

數據源類型與實戰範例

1. 檔案數據源(CSV / Excel)

專案根目錄建立 Data.xls,首行列名不參與測試。
Excel數據源範例

測試類:

@RunWith(Feeder.class)
public class F4JfromFile {
    @Test
    @Source("Data.csv")
    public void testAccessCheck_CSV(String userName, String pw, boolean expected) {
        assertEquals(expected, UserAccess.accessCheck(userName, pw));
    }

    @Test
    @Source("Data.xls")
    public void testAccessCheck_Excel(String userName, String pw, boolean expected) {
        assertEquals(expected, UserAccess.accessCheck(userName, pw));
    }
}

執行方式同 JUnit(Run As → JUnit Test)。數據按行迭代,列順序映射參數,列數少於參數會失敗。
執行結果示例

2. 資料庫數據源

適用於大量測試數據或複用業務數據。@Database 宣告連線資訊,可註解於類(全類共用)或方法(單方法專用)。

屬性說明:

  • id:數據源標識符,供 @Source 關聯。
  • url、driver、user、password:JDBC 連線參數。

@Source 關鍵屬性:

  • id:對應 @Database.id。
  • selector:SQL 查詢語句,結果集列順序映射方法參數。

範例:DB2 Sample 資料庫,TEST 表存測試數據(同 Excel)。
資料表測試數據

類級別宣告:

@RunWith(Feeder.class)
@Database(
    id = "testdb",
    url = "jdbc:db2://localhost:50000/SAMPLE",
    driver = "com.ibm.db2.jcc.DB2Driver",
    user = "db2admin",
    password = "db2admin"
)
public class F4JfromDB {
    @Test
    @Source(id = "testdb", selector = "select * from TEST")
    public void testAccessCheck(String userName, String pw, String expected) {
        Boolean bSucess = UserAccess.accessCheck(userName.trim(), pw.trim());
        assertEquals(expected.trim(), bSucess.toString());
    }
}

方法級別宣告:

@RunWith(Feeder.class)
public class F4JfromDB_Method {
    @Test
    @Database(
        id = "testdb",
        url = "jdbc:db2://localhost:50000/SAMPLE",
        driver = "com.ibm.db2.jcc.DB2Driver",
        user = "db2admin",
        password = "db2admin"
    )
    @Source(id = "testdb", selector = "select * from TEST")
    public void testAccessCheck(String userName, String pw, String expected) {
        Boolean bSucess = UserAccess.accessCheck(userName.trim(), pw.trim());
        assertEquals(expected.trim(), bSucess.toString());
    }
}

執行過程:建立連線 → selector 查詢 → 結果集按列順序映射參數 → 執行測試。結果同檔案源。

3. 自定義數據源

除內建源,Feed4JUnit 支援封裝 JUnit 4 參數化方式實現自定義源,滿足特殊需求(如 REST API、NoSQL 等),此處不贅述。

結語

Feed4JUnit 以簡潔註解實現數據代碼分離,顯著增強 JUnit 易用性。除本文示範的檔案/資料庫源,還提供大數據隨機測試、等價類測試等進階功能,有興趣可自行探索。

描述名字大小下載方法
範例代碼SampleProj.zip13KBHTTP
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved