1.抽象类
package JavaStruct;
import junit.framework.TestCase;
import net.sf.hibernate.FlushMode;
import net.sf.hibernate.Session;
import net.sf.hibernate.SessionFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.orm.hibernate.SessionFactoryUtils;
import org.springframework.orm.hibernate.SessionHolder;
import org.springframework.transaction.support.TransactionSynchronizationManager;
//抽象类,含抽象方法,继承一个类或实现一个接口
public abstract class AbstractTest extends TestCase{
protected ApplicationContext context;
protected void setUp() throws Exception {
context = getContext();
//Application.getInstance().setContainer(new SpringContainer(context));
openSession();
super.setUp();
}
protected abstract ApplicationContext getContext();
private void openSession() {
SessionFactory sessionFactory = (SessionFactory) context.getBean("sessionFactory");
Session hibSession = SessionFactoryUtils.getSession(sessionFactory, true);
hibSession.setFlushMode(FlushMode.NEVER);
TransactionSynchronizationManager.bindResource(sessionFactory, new SessionHolder(hibSession));
}
protected void tearDown() throws Exception {
super.tearDown();
closeSession();
}
private void closeSession() {
SessionFactory sessionFactory = (SessionFactory) context.getBean("sessionFactory");
SessionHolder sessionHolder = (SessionHolder) TransactionSynchronizationManager.unbindResource(sessionFactory);
SessionFactoryUtils.closeSessionIfNecessary(sessionHolder.getSession(), sessionFactory);
}
protected void newSession() {
closeSession();
openSession();
}
}
具体类继承抽象类,写具体方法
package JavaStruct;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MyTest extends AbstractTest{
private ServiceA serviceA;
@Override
protected ApplicationContext getContext() {
return new ClassPathXmlApplicationContext(new String[]{"application_context.xml,oracle.xml,aaa.xml"});
}
protected void setUp() throws Exception{
super.setUp();
serviceA=(ServiceA)context.getBean("ServiceA");
}
public void testab(){
//testMethod
}
}