`
chenjingbo
  • 浏览: 456223 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Spring-test做数据库操作的单元测试

阅读更多

spring提供了一个做单元测试的方法。我最喜欢的是它的自动事务回滚功能。用起来很爽。

直接看代码

package com.ali.gongyi.model.account;

import junit.framework.Assert;

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

import com.ali.gongyi.dao.BaseDao;

/**
 * @author zhenghui 
 * @version 1.0
 * @data 2011-2-11 下午03:22:14
 * 
 */
@RunWith(SpringJUnit4ClassRunner.class) //指定测试用例的运行器 这里是指定了Junit4  
@ContextConfiguration("classpath:applicationContext.xml")  
@TransactionConfiguration(transactionManager="transactionManager", defaultRollback=true)  
@Transactional    
public class TestUserDao {
	@Autowired
	private BaseDao<User, Long> userDao = null;

	@Test
	@Rollback(true)//上面已经设置defaultRollback=true。这里其实可以不用写了
	public void testModifyUser() {
		User user = userDao.findById(2L);
		System.out.println(user.getId());
		user.setDisplayName("系统管理员4");
		userDao.saveOrUpdate(user);
		Assert.assertEquals(userDao.findById(2L).getDisplayName(), "系统管理员4");
	}
}

 

说明

1  userDao的实现可以是hibernate,也可以是ibatis (这两个我都做了测试,这种方式都是没有问题的)。当然最主要看重的是自动回滚。

2 transactionManager需要自己配置。

分享到:
评论
3 楼 linghy 2013-03-21  
Spring的手册上说:如果只有一个transaction manger,或者即使有多个但是用来测试的那个叫做transactionManager,并且事务自动回滚,可以不要 @TransactionConfiguration。博主把这行去掉试试
2 楼 tanjianna 2013-03-12  
userDao.saveOrUpdate(user);为什么我执行这句了数据库还没更新呢?所以查询出来的userDao.findById(2L).getDisplayName()还是原来的值,而不是"系统管理员4" 求指教
1 楼 bingobird 2011-02-21  
不错,配置还比较方便,不知跨库怎么样

相关推荐

Global site tag (gtag.js) - Google Analytics