介绍一下Srping的Junit扩展机制相关类:
下载包:spring-test.jar
在包org.springframework.test下的Spring测试父类
1、AbstractSpringContextTests类[1],该类全部方法是protected的,通常不使用这个类,而使用它的子类们。
2、AbstractDependencyInjectionSpringContextTests类[2]:继承于类[1]:如果仅仅使用Spring依赖注入功能,可以让测试用例继承该类。
3、AbstractTransactionalSpringContextTests类[3]:继承于类[2], 继承该类的测试用例在spring管理的事务中进行,测试完后对数据库的记录不会造成任何影响。对数据库进行一些操作后,它会自动把数据库回滚,这样就保证了你的测试对于环境没有任何影响。
4、AbstractTransactionalDataSourceSpringContextTests:继承于类[3], 功能更强大,用于测试持久层组件,看其源代码, 有一行"protected JdbcTemplate jdbcTemplate;",提供了一个JdbcTemplate的变量, 通过该对象可以直接操作数据库。
继承了这四个类的测试类都是属于Test Case性质,可以在Test Suite里跑。
在包org.springframework.test.context.junit4下的Spring测试父类
下载包:spring-test.jar
在包org.springframework.test下的Spring测试父类
1、AbstractSpringContextTests类[1],该类全部方法是protected的,通常不使用这个类,而使用它的子类们。
2、AbstractDependencyInjectionSpringContextTests类[2]:继承于类[1]:如果仅仅使用Spring依赖注入功能,可以让测试用例继承该类。
3、AbstractTransactionalSpringContextTests类[3]:继承于类[2], 继承该类的测试用例在spring管理的事务中进行,测试完后对数据库的记录不会造成任何影响。对数据库进行一些操作后,它会自动把数据库回滚,这样就保证了你的测试对于环境没有任何影响。
4、AbstractTransactionalDataSourceSpringContextTests:继承于类[3], 功能更强大,用于测试持久层组件,看其源代码, 有一行"protected JdbcTemplate jdbcTemplate;",提供了一个JdbcTemplate的变量, 通过该对象可以直接操作数据库。
继承了这四个类的测试类都是属于Test Case性质,可以在Test Suite里跑。
在包org.springframework.test.context.junit4下的Spring测试父类
AbstractTransactionalJUnit4SpringContextTests同样在spring管理的事务中进行,但是继承该类后无法再在Test Suite里跑。
public class ArticleDataDaoTest extends AbstractTransactionalSpringContextTests {
protected String[] getConfigLocations() {
return new String[] { "classpath:applicationContext.xml" };
}
CfmCatalogArticleDataDAO cfmCatalogArticleDataDAO;
CfmCatalogMediaDAO media;
public CfmCatalogMediaDAO getMedia() {
return media;
}
public void setMedia(CfmCatalogMediaDAO media) {
this.media = media;
}
public CfmCatalogArticleDataDAO getCfmCatalogArticleDataDAO() {
return cfmCatalogArticleDataDAO;
}
public void setCfmCatalogArticleDataDAO(
CfmCatalogArticleDataDAO cfmCatalogArticleDataDAO) {
this.cfmCatalogArticleDataDAO = cfmCatalogArticleDataDAO;
}
public void testTreeView() {
List list = cfmCatalogArticleDataDAO.getFormalListByCataTypeIdAndName(
null, "01", -1, -1);
assertTrue(list.size() != 0);
}
}
然后直接运行就可以了,在这个过程中涉及到的所有事务都回RollBack.(),我觉得这个功能不错。