1. 程式人生 > >關於spring3整合hibernate進行junit測試的錯誤總結

關於spring3整合hibernate進行junit測試的錯誤總結

[size=large]今天對框架功能進行整合,用的是spring2.5的框架,本來想換新的,但是公司不讓,沒辦法,需要對整合後的功能進行測試,拿了個spring-test.jar包測試,本來想用註解方式進行測試的,奈何不給力,沒辦法只能使用AbstractTransactionalDataSourceSpringContextTests這個過時的類進行測試了.[/size]
關於註解的方法我這裡給個網址,不要被E文嚇到,其實很好看懂的.
[url]http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/testing.html[/url]

[size=large]哈哈,如果用的是spring老的框架的話會出現[color=red]NoSuchMethodError (BeanUtils.instantiateClass) running JUnit4 tests in Eclipse [/color]類似的錯誤的,看了下社群他們提交的錯誤,意思就是不支援老版本的,需要換spring3的jar包才行.給個網站,大家看下.[/size]
[url]http://forum.springsource.org/showthread.php?125062-NoSuchMethodError-(BeanUtils-instantiateClass)-running-JUnit4-tests-in-Eclipse[/url]

[size=large][color=red]這個方法用不成,只能使用過時的方法進行測試了,給個程式碼.[/color][/size]

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();
}
}

[size=large]這個是個junit的測試用例,不過這裡有個問題,我沒怎麼去搞,就是junit自動對資料回滾了,就算設定了[color=red]@TransactionConfiguration(defaultRollback=false)[/color]也不行.
沒辦法又用了一個方法,上程式碼[/size]

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);

[size=large]用這種方法可以插入資料,而且不會回滾.[/size]
[size=x-large][color=red]大家有問題或者意見的可以交流.[/color][/size]