重新了解Hibernate,发现在做单元测试时比较痛苦,增加一个类,要写一堆代码,并且要在配置文件中增加该类的映射问题,随将TestCase封装成一个新类HibernateTestCase 用于POJO测试。
在基类里面自动创建和销毁Session,SessionFractory并实现自动加载maping文件。这样在子类的测试中
专注于业务的测试就行了。
package com.jtv.junit;
import org.hibernate.*;
import org.hibernate.cfg.Configuration;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;
import java.io.IOException;
import junit.framework.TestCase;
public class HibernateTestCase extends TestCase {
public Session session = null;
public SessionFactory sf = null;
/**
* Name:setUp
* Desc
* 初始化Hibernate配置文件,并自动搜寻Hibernate .hbm.xml文件,自动加载
* @author ddwcyl
*/
protected void setUp() throws Exception {
// 调用SuperClass的setUp()事件
super.setUp();
Configuration config = new Configuration().configure();
//auto search and load mapping
ResourcePatternResolver rp = new PathMatchingResourcePatternResolver(this.getClass().getClassLoader());
Resource[] resources;
try {
resources = rp.getResources("/**/*.hbm.xml");
for(int i=0;i<resources.length;i++){
Resource resource = resources[i];
//将找到的配置文件加入
if(resource.exists())
config.addFile(resource.getFile());
}
} catch (IOException e) {
e.printStackTrace();
}
//init SessionFactory
sf = config.buildSessionFactory();
session = sf.openSession();
}
/**
* Name:tearDown
* Desc
* 关闭已经打开的资源,Session和SessionFractory
* @author ddwcyl
*/
protected void tearDown() throws Exception {
//close session,sessfactory
super.tearDown();
if(session!=null){
session.close();
}
if(sf!=null){
sf.close();
}
}
}