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配置文件,测试性能不是一般的跌眼镜。。。