Spring+Hibnate注解编程单元测试

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.junit4.AbstractTransactionalJUnit4SpringContextTests;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.transaction.TransactionConfiguration;
import org.springframework.test.context.ContextConfiguration; 
import org.springframework.transaction.annotation.Transactional;

//使用@RunWith(SpringJUnit4ClassRunner.class),才能使测试运行于Spring测试//环境    
@RunWith(SpringJUnit4ClassRunner.class)    
//@ContextConfiguration 注解有以下两个常用的属性:    
//locations:可以通过该属性手工指定 Spring 配置文件所在的位置,可以指定一个或多个 Spring 配置文件    
//inheritLocations:是否要继承父测试类的 Spring 配置文件,默认为 true 
@ContextConfiguration(locations={"classpath:spring/spring-config-business.xml"})  
public class TestRisk extends AbstractTransactionalJUnit4SpringContextTests{
	
	@Autowired    
    private IRiskBO bo; 
	
	@Test
	@Transactional
	@rollback(false)
    public void Test()    
    {    
       Risk risk = bo.findRiskById("CW01", true);
       System.out.println(risk.getName()+":"+risk.getCode());
    }  
}

 说明:

@Test   //标明是测试方法   

@Transactional   //标明此方法需使用事务   

@Rollback(false)  //标明使用完此方法后事务不回滚,true时为回滚

 

配置文件不在classpath路径下,可以写成

@ContextConfiguration(locations={"file:src/main/webapp/WEB-INF/applicationContext.xml"})    

不同写法,内部执行的源码也不一样:

//class load
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");

//file load
ApplicationContext applicationContext = new FileSystemXmlApplicationContext("src/main/webapp/WEB-INF/applicationContext.xml");

 

再说一下Spring提供的JUnit框架扩展:
   1. AbstractSpringContextTests:spring中使用spring上下文测试的Junit扩展类,我们一般不会使用这个类来进行单元测试,它是spring内部设计使用到的类
   2. AbstractDependencyInjectionSpringContextTests:这是AbstractSpringContextTests的直接子类,支持依赖spring上下文的测试类,这个类不支持事务。
   3. AbstractTransactionalSpringContextTests:这是 AbstractDependencyInjectionSpringContextTests的直接子类,这个类一般应用在事务相关的测试中,一旦完成每个测试它就会正常地回滚事务,不会真正更新数据库,若要手动设置事务相关操作,你可以重载onSetUpInTransaction和 onTearDownInTransaction方法,以便手工开始并提交事务,或者调用setComplete()方法。这个类也可以在没有事务的情况下,使用这个类。
   4. AbstractTransactionalDataSourceSpringContextTests:这是 AbstractTransactionalSpringContextTests的直接子类,它使用了Spring的基于JDBC的 jdbcTemplate工具类,支持数据库级别的事务。
    你的TestCase Class必须继承的是上述四个AbstractXXXSpringContextTests中的其中一个。一般我们继承SpringJUnit4ClassRunner或者利用注解声明@RunWith(SpringJUnit4ClassRunner.class)

参考网站:

http://zxf-noimp.iteye.com/blog/854556

http://chenzehe.iteye.com/blog/1468130

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值