JUnit可以對代碼進行測試,可以在開發時對代碼的正確性進行驗證,後來演進出了TDD,測試先行。可現在很多項目使用SSH架構,Spring管理的Bean在JUnit中無法注入,而且頻繁的進行單元測試會產生大量的垃圾數據,這是困擾開發人員的一大問題。
幸好Spring提供了一個類,用來集成JUnit進行Service層和DAO層的單元測試,它可以將Spring管理的Bean進行注入並在測試結束後控制Hibernate將數據回滾,這個類就是“AbstractTransactionalDataSourceSpringContextTests”。
下面是這個類的使用方法:
public class JUTest extends AbstractTransactionalDataSourceSpringContextTests
{
//Service層Bean
private MyService myServiceImpl;
//重寫父類的方法,進行Spring配置文件的初始化
public String[] getConfigLocations()
{
String[] config = new String[] { "/spring/applicationContext.xml"
, "/spring/test.xml"
, "/spring/applicationContext-allbean-hibernate.xml" };
return config;
}
//測試方法
public void testService()
{
myServiceImpl.doService();
}
//Service層Bean的set方法,這裏注意一定要加(@Qualifier("myServiceImpl"),不然會報一個bean重複的錯誤
public void setMyServiceImpl(@Qualifier("myServiceImpl") MyService myServiceImpl)
{
this.myServiceImpl = myServiceImpl;
}
}
寫完後右鍵Run As JUnit就OK啦!
不過有一個問題,這樣的測試只能測試會不會報錯如果插入的數據有問題是測試不出來的,而且測試結束後數據會回滾,無法在數據庫中看到測試數據,那咱麼辦呢?可以在這裏寫一個JDBC的查詢邏輯,將數據查出來進行驗證。
另外,貌似TestSuite中所有的TestCase都會加載一遍Spring配置文件,測試性能不是一般的跌眼鏡。。。