業務邏輯中常見同一流程處理多組輸入(如登入驗證:用戶名/密碼長度、特殊字元限制)。傳統 JUnit 需為每組輸入編寫獨立測試方法,產生大量冗餘代碼,維護困難。JUnit 4 參數化測試雖支援多數據輸入,但數據硬編碼於代碼中,隨業務增減修改極不便。Feed4JUnit 作為 JUnit 擴展,完美解決數據與代碼分離,支援 CSV/Excel、資料庫、自定義數據源,極大提升測試編寫與維護效率。
lib 目錄複製至 Java 專案根目錄。
lib 下所有 Jar。
測試類需匯入: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:聲明並接收數據源,參數按列順序映射到方法參數。專案根目錄建立 Data.xls,首行列名不參與測試。

測試類:
@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)。數據按行迭代,列順序映射參數,列數少於參數會失敗。

適用於大量測試數據或複用業務數據。@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 查詢 → 結果集按列順序映射參數 → 執行測試。結果同檔案源。
除內建源,Feed4JUnit 支援封裝 JUnit 4 參數化方式實現自定義源,滿足特殊需求(如 REST API、NoSQL 等),此處不贅述。
Feed4JUnit 以簡潔註解實現數據代碼分離,顯著增強 JUnit 易用性。除本文示範的檔案/資料庫源,還提供大數據隨機測試、等價類測試等進階功能,有興趣可自行探索。
| 描述 | 名字 | 大小 | 下載方法 |
|---|---|---|---|
| 範例代碼 | SampleProj.zip | 13KB | HTTP |