聊聊单元测试(三)——Spring Test+JUnit完美组合
2016-08-04
@Before
public void init() {
ApplicationContext ctx = new FileSystemXmlApplicationContext( "classpath:spring/spring-basic.xml");
baseDao = (IBaseDao) ctx.getBean("baseDao");
assertNotNull(baseDao);
} 使用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);
}
}