圖 5. 數(shù)據(jù)表中的測試數(shù)據(jù)
首先,創(chuàng)建測試類,添加 @Database 注釋并增加數(shù)據(jù)庫的連接信息,同時指定一個表示數(shù)據(jù)庫的 id,在測試方法的 @Source 中通過 id 進(jìn)行關(guān)聯(lián),并制定 selector 的語句進(jìn)行數(shù)據(jù)查詢,例如本例中的 selector = "select * from TEST",會從 TEST 表中取出全部數(shù)據(jù)用于測試,細(xì)節(jié)請參考以下代碼示例:
清單 5 為在類上聲明 @Database。
package sample.test;
import static org.junit.Assert.assertEquals;
import org.databene.benerator.anno.Database;
import org.databene.benerator.anno.Source;
import org.databene.feed4junit.Feeder;
import org.junit.Test;
import org.junit.runner.RunWith;
import sample.code.UserAccess;
/*
* Feed4JUnit - Get Data from Database, all test methods can use the database data
*/
@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());
}
}
清單 6. 在方法上聲明 @Database
/*
* Feed4JUnit - Get Data from Database,
only the specified method can use the database data
*/
@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());
}
}
測試運(yùn)行過程中,通過 url,driver 等信息建立數(shù)據(jù)連接,通過 selector 發(fā)出數(shù)據(jù)請求,后完成查詢并把數(shù)據(jù)傳遞給測試方法,數(shù)據(jù)在傳遞給方法的時候,會按數(shù)據(jù)表的列的順序與參數(shù)進(jìn)行匹配,運(yùn)行結(jié)果與圖 4 類似。
自定義數(shù)據(jù)源
除了 CSV,Excel 和數(shù)據(jù)庫的數(shù)據(jù)源外,F(xiàn)eed4JUnit 還提供自定義數(shù)據(jù)源,以滿足不同用戶的需求,用戶同樣可以通過封裝 JUnit 4 提供的參數(shù)化測試的方法來完成數(shù)據(jù)源自定義,所有這里作者不再詳述,用戶可以封裝并取得不同的數(shù)據(jù)源的數(shù)據(jù),傳遞給 Feed4JUnit 的相應(yīng)接口,來完成數(shù)據(jù)源的自定義。
結(jié)束語
本文通過對比介紹和簡單易懂的實(shí)例全面講解了 Feed4JUnit 對數(shù)據(jù)與代碼分離的測試支持。通過提供簡單的注釋,F(xiàn)eed4JUnit 使用戶能夠極其方便的實(shí)施數(shù)據(jù)與代碼分離的測試,極大地增強(qiáng)了 JUnit 測試框架的易用性。 相信您已經(jīng)在本文的敘述中看到它的優(yōu)點(diǎn)。同時,本文所敘述的僅僅是 Feed4JUnit 提供的測試增強(qiáng)功能的一部分,F(xiàn)eed4JUnit 同時還提供了大量數(shù)據(jù)的隨機(jī)測試和等價類測試等眾多功能,如果您感興趣可以自行參考。