<span style="font-size:12px;font-weight: normal;">@Before public void init() { ApplicationContext ctx = new FileSystemXmlApplicationContext( "classpath:spring/spring-basic.xml"); baseDao = (IBaseDao) ctx.getBean("baseDao"); assertNotNull(baseDao); }</span>**可以试一下 BeforeClass
1. AbstractSpringContextTests:(不建议使用)
spring中使用spring上下文测试的Junit扩展类,我们一般不会使用这个类来进行单元测试,它是spring内部设计使用到的类
2. AbstractDependencyInjectionSpringContextTests:(不支持事务,不建议使用)
这是AbstractSpringContextTests的直接子类,支持依赖spring上下文的测试类,这个类不支持事务。
3. AbstractTransactionalSpringContextTests:(支持事务,可以使用)
这是 AbstractDependencyInjectionSpringContextTests的直接子类,这个类一般应用在事务相关的测试中,一旦完成每个测试它就会正常地回滚事务,不会真正更新数据库,若要手动设置事务相关操作,你可以重载onSetUpInTransaction和 onTearDownInTransaction方法,以便手工开始并提交事务,或者调用setComplete()方法。这个类也可以在没有事务的情况下,使用这个类。
4. AbstractTransactionalDataSourceSpringContextTests:(支持数据库级别的事务)
这是 AbstractTransactionalSpringContextTests的直接子类,它使用了Spring的基于JDBC的 jdbcTemplate工具类,支持数据库级别的事务。
使用Spring的测试框架需要加入以下依赖包:
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.9</version> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version> 3.2.4.RELEASE </version> <scope>provided</scope> </dependency>
在此,推荐创建一个和src平级的源文件目录,因为src内的类都是为日后产品准备的,而此处的类仅仅用于测试。而包的名称可以和src中的目录同名,这样由于在test源目录中,所以不会有冲突,而且名称又一模一样,更方便检索。这也是Maven的约定。
@RunWith(SpringJUnit4ClassRunner.class) //使用junit4进行测试 @ContextConfiguration({"/spring/app*.xml","/spring/service/app*.xml"}) //加载配置文件 //------------如果加入以下代码,所有继承该类的测试类都会遵循该配置,也可以不加,在测试类的方法上 //控制事务,参见下一个实例 //这个非常关键,如果不加入这个注解配置,事务控制就会完全失效! //@Transactional //这里的事务关联到配置文件中的事务控制器(transactionManager = "transactionManager"),同时 //指定自动回滚(defaultRollback = true)。这样做操作的数据才不会污染数据库! //@TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = true) //------------ public class BaseJunit4Test { }
public class UserAssignServiceTest extends BaseJunit4Test{ @Resource //自动注入,默认按名称 private IBaseDao baseDao; @Test //标明是测试方法 @Transactional //标明此方法需使用事务 @Rollback(false) //标明使用完此方法后事务不回滚,true时为回滚 public void insert( ) { String sql="insert into user(name,password) values(?,?)"; Object[] objs=new Object[]{"00","000"}; baseDao.insert( sql , objs ); String sql1="select * from user where name=? and password=? "; List<Map<String,Object>> list=baseDao.queryForList( sql1 , objs ); System.out.println(list); assertTrue(list.size( )>0); } }
http://blog.csdn.net/shan9liang/article/details/40452469