用groovy測試java代碼

最近開始學習groovy,把以前java項目的單元測試用groovy改寫了一部份,總結一些心得,跟大家交流一下。

這裏只探討業務層的測試。原來的測試封裝了一個BaseServiceTest類,繼承自spring提供的AbstractTransactionalDataSourceSpringContextTests。在onSetUpBeforeTransaction方法裏通過dbunit把準備數據插入數據庫。執行測試方法。回滾事務,在onTearDownAfterTransaction方法裏通過dbunit刪除準備數據。這個大家應該都很熟悉了。

用groovy寫測試有幾點要注意:
1. 我的測試都是在eclipse裏面跑,需要在eclipse.ini裏面加上-Dfile.encoding=UTF-8 。不然groovy文件裏的中文會是亂碼。

2.取消spring的bean dependency check。因爲每個groovy類都實現了GroovyObject接口,都有setMetaClass方法,spring找不到metaClass這個bean會報錯。如果你的測試類繼承了AbstractTransactionalDataSourceSpringContextTests,調用setDependencyCheck(false)方法就行。

3.因爲我們的測試類繼承了自己的BaseServiceTest,所以不能繼承groovy的GroovyTestCase類。但是我們又想用GroovyTestCase提供的驗證方法,怎麼辦?
可以把GroovyTestCase提供的驗證方法賦給父類的字段,比如
final shouldFail = new GroovyTestCase().&shouldFail

用groovy寫測試,代碼量比差不多是原來的60%-70%(行數少了,分號沒了,默認public,getter/setter用./.=替代,等等),關鍵是可以當作學習groovy的練習,大家試試吧。

測試代碼大致如下:

class DepartmentServiceTest extends BaseServiceTest{

DepartmentService departmentService

final shouldFail = new GroovyTestCase().&shouldFail

//測試新建部門,當名稱爲空應該拋出異常
void testAddDepartmentFailBecauseNameEmpty() {
shouldFail(BusinessException){
departmentService.saveOrUpdate(new Department())
}
}

//測試新建部門,當名稱重複應該拋出異常
void testAddDepartmentFailBecauseNameExist() {
Department department = new Department()
department.name = "人力資源"
shouldFail(BusinessException){
departmentService.saveOrUpdate(department)
}
}

String[] getDataSetFileNames(){
["department.xml"]
}

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章