利用Spring扩展机制Junit测试Dao和Service的总结
在网上看了很多关于Junit测试Dao和Service的文章,然后做出自己需要的例子,这里源码共享一下,以此回馈一下
介绍一下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测试父类
AbstractTransactionalJUnit4SpringContextTests同样在spring管理的事务中进行,但是继承该类后无法再在Test Suite里跑。
以下是测试Service的Abstract方法,写测试类时可以继承该方法,让测试类变得简单。
AbstractServiceTransactionalTests.Java
package com.Bruce.springJunit.service;import java.util.List;import org.junit.Test;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.test.annotation.Rollback;import com.Bruce.entity.Sysparamconf;import com.Bruce.service.SysparamconfService;public class TestSysparamconfService extends AbstractServiceTransactionalTests {@Autowiredprivate SysparamconfService sysparamconfService;@OverrideString[] getOtherConfigs() {return new String[] { applicationContextFile };}@Testpublic void testFindAll() {// fail("Not yet implemented");System.out.println("test FindAll()---size "+ sysparamconfService.findAll().size());}@Test@Rollback(true) //保护数据库现场,让事物不提交,直接rollbackpublic void testWriteSysparameterSysparamconf() {System.out.println("test WriteSysparameter...");Sysparamconf sysparamconf = new Sysparamconf();boolean test;sysparamconf.setPname("testName2");sysparamconf.setPtype(1);sysparamconf.setPvalue("testName2_value2");test = sysparamconfService.writeSysparameter(sysparamconf);assertTrue(test);}}