关于spring3集成hibernate进行junit测试的错误总结

今天对框架功能进行整合,用的是spring2.5的框架,本来想换新的,但是公司不让,没办法,需要对整合后的功能进行测试,拿了个spring-test.jar包测试,本来想用注解方式进行测试的,奈何不给力,没办法只能使用AbstractTransactionalDataSourceSpringContextTests这个过时的类进行测试了.
关于注解的方法我这里给个网址,不要被E文吓到,其实很好看懂的.
http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/testing.html

哈哈,如果用的是spring老的框架的话会出现NoSuchMethodError (BeanUtils.instantiateClass) running JUnit4 tests in Eclipse 类似的错误的,看了下社区他们提交的错误,意思就是不支持老版本的,需要换spring3的jar包才行.给个网站,大家看下.
http://forum.springsource.org/showthread.php?125062-NoSuchMethodError-(BeanUtils-instantiateClass)-running-JUnit4-tests-in-Eclipse

这个方法用不成,只能使用过时的方法进行测试了,给个代码.
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.junit.Test;
import org.springframework.test.AbstractTransactionalDataSourceSpringContextTests;
import org.springframework.test.context.transaction.TransactionConfiguration;

import com.magus.message.dao.MessageDao;
import com.magus.message.service.MessageService;
import com.magus.message.vo.MessageFormBean;
@TransactionConfiguration(defaultRollback=false)
public class SpringHibernateTest extends AbstractTransactionalDataSourceSpringContextTests{	
	@Override
	public String[] getConfigLocations(){
		String[] config=new String[]{"/spring/applicationContext.xml","/spring/message-service.xml"};
		return config;
		
	}
	@Test
	public void test() {
		MessageService ms=(MessageService) applicationContext.getBean("messageService");
		SessionFactory sf=(SessionFactory) applicationContext.getBean("openplantSessionFactory");
		Session s=sf.openSession();
		Transaction tx=s.beginTransaction();
		
		MessageDao md=(MessageDao) applicationContext.getBean("messageDao");
		MessageFormBean sm=new MessageFormBean();
//		Date d=sdf.parse((new Date()).toString());
		sm.setMessageContent("wo ai shuangxi");
		sm.setOtherPhones("12345678");
		tx.begin();
		ms.createMessage(sm);
		tx.commit();
	}
}

这个是个junit的测试用例,不过这里有个问题,我没怎么去搞,就是junit自动对数据回滚了,就算设置了@TransactionConfiguration(defaultRollback=false)也不行.
没办法又用了一个方法,上代码
public static void main(String[] args) {
		args=new String[]{"/spring/applicationContext.xml","/spring/message-service.xml"};
		BeanFactory factory=new ClassPathXmlApplicationContext(args);
		MessageService ms=(MessageService) factory.getBean("messageService");
		MessageFormBean sm=new MessageFormBean();
//		Date d=sdf.parse((new Date()).toString());
		sm.setMessageContent("wo ai shuangxi");
		sm.setOtherPhones("12345678");
		ms.createMessage(sm);

用这种方法可以插入数据,而且不会回滚.
大家有问题或者意见的可以交流.

猜你喜欢

转载自wangshiyang.iteye.com/blog/1622508