import static org.junit.Assert.assertEquals ; import org.databene.benerator.anno.Source; import org.databene.feed4junit.Feeder; import org.junit.Test; import org.junit.runner.RunWith; import sample.junit.code.*; @RunWith (Feeder.class ) public class Feed4junitSample { @Test @Source( "Data.csv" )//CSV source public void testAccessCheck_CSV(String userName, String pw, boolean expected) { assertEquals(expected, UserAccess. accessCheck(userName, pw)); } @Test @Source( "data.xls" )//Excel source public void testAccessCheck_Excel(String userName, String pw, boolean expected) { assertEquals(expected, UserAccess. accessCheck(userName, pw)); } } |
運行結果如下:
3、數據庫作為數據源
同樣,Feed4junit也支持數據庫數據源,這里不做詳細的介紹:其原理和上面文件數據源差不多,樣例代碼如下:
類上聲明@Database:
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:mysql://localhost:5000/SAMPLE", driver = "com.mysql.jdbc.Driver", user = "admin", password = "admin") 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()); } } |
測試方法上聲明@Database
@RunWith(Feeder.class) public class F4JfromDB_Method { @Test @Database( id = "testdb", url = "jdbc:mysql://localhost:5000/SAMPLE", driver = "com.mysql.jdbc.Driver", user = "admin", password = "admin") @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()); } } |
測試運行過程中,通過 url,driver 等信息建立數據連接,通過 selector 發出數據請求,最后完成查詢并把數據傳遞給測試方法,數據在傳遞給方法的時候,會按數據表的列的順序與參數進行匹配.
4、最后
Feed4JUnit 提供了對數據與代碼分離的測試支持。只需要簡單的注釋,Feed4JUnit 就可以使用戶很方便的實施數據與代碼分離之間的測試,對于習慣了JUnit 測試框架的同學來說,是一個十分省力的利器。
Feed4JUnit 同時還提供大量數據的隨機測試和等價類測試等眾多功能,這個留到后面再進行挖掘。
原文轉自:http://www.uml.org.cn/Test/201302225.asp