package test.tools; /** * @(#)TTool.java 2012-02-08 初版 * Spring框架单元测试辅助工具类 * * 单元测试使用必看: * TTool类说明 * - TTool.getBean(String beanName); * 根据Spring配置文件中的bean的id获取实体对象 * - TTool.testBegin(); * - TTool.testEnd(); * 测试开始调用TTool.testBegin(),测试结束调用TTool.testEnd(),模拟OpenSessionInViewFilter功能 ***************直接输出**************** * - TTool.print(Map gridMap) * 将分页方法取得的实体列表中的实体装换为JSON字符串,并输出 * - TTool.print(Object object) * 将对象实体转换为json字符串,并输出. * - TTool.print(List list) * 将列表对象装换为json字符串,并输出 ***************格式化输出***************** * - TTool.println(Map gridMap) * 将分页方法取得的实体列表中的实体装换为JSON字符串,并输出 * - TTool.println(Object object) * 将对象实体转换为json字符串,并输出. * - TTool.println(List list) * 将列表对象装换为json字符串,并输出 * * @author yanjianzhong * @version 1.0 */ import java.lang.reflect.Field; import java.lang.reflect.Method; import java.net.URL; import java.util.ArrayList; import java.util.List; import java.util.Map; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.orm.hibernate3.SessionFactoryUtils; import org.springframework.orm.hibernate3.SessionHolder; import org.springframework.transaction.support.TransactionSynchronizationManager; public class TTool { public static void out(String msg){ if(true) System.out.println("/------ Htj2ee: "+msg); } public static ApplicationContext ctx = null; //①Spring容器引用 private static List<String> CONFIG_FILES = new ArrayList<String>(); //②Spring配置文件 static{ out("*************************************************************/"); out("正在初始化单元测试环境,请稍后..."); URL url = TTool.class.getResource("TTool.class"); String path = url.getPath(); path = path.substring(0, path.lastIndexOf("WEB-INF")); //基础配置 CONFIG_FILES.add("file:"+path+"WEB-INF/applicationContext-Hibernate.xml"); //业务配置 CONFIG_FILES.add("org/hdht/**/*.spring.xml"); //③启动Spring容器 String[] configs = new String[CONFIG_FILES.size()]; configs = CONFIG_FILES.toArray(configs); ctx = new ClassPathXmlApplicationContext(configs); out("恭喜您,单元测试环境初始化完毕"); } public static void testBegin(){ SessionFactory sessionFactory = (SessionFactory) getBean("sessionFactory"); Session s = sessionFactory.openSession(); TransactionSynchronizationManager.bindResource(sessionFactory, new SessionHolder(s)); out("打开SESSION成功 "); } public static void testEnd(){ SessionFactory sessionFactory = (SessionFactory) getBean("sessionFactory"); SessionHolder holder = (SessionHolder) TransactionSynchronizationManager.getResource(sessionFactory); Session cursession = holder.getSession(); cursession.flush();//刷新session SessionFactoryUtils.releaseSession(cursession, sessionFactory);//释放session holder.clear();//清理holder out("释放SESSION成功"); } public static Object getBean(String bid){ return ctx.getBean(bid); } /** * 用反射生成Json格式字符串 * * @param object * 任意类型对象 * @return 拼接好的StringBuffer对象 * */ private static StringBuffer ToJson(Object object,boolean ln) { Class clazz = object.getClass(); Field[] fields = clazz.getDeclaredFields(); StringBuffer sb = new StringBuffer("{["); if(ln) sb.append("\n"); for (Field field : fields) { String fieldName = field.getName(); try{ Method method = clazz.getMethod("get" + change(fieldName), null); Object property = method.invoke(object, null); if (property == null) { if(ln) sb.append(" "+fieldName+":\"\",\n"); else sb.append(fieldName+":\"\","); } else { if(ln) sb.append(" "+fieldName+":\"" + property + "\",\n"); else sb.append(fieldName+":\"" + property + "\","); } }catch(Exception e){ } } sb.append("]}"); return sb.replace(sb.lastIndexOf(","), sb.lastIndexOf(",") + 1, ""); } private static StringBuffer ToJson(Object object) { return ToJson(object,true); } /** * @param src * 源字符串 * @return 字符串,将src的第一个字母转换为大写,src为空时返回null */ private static String change(String src) { if (src != null) { StringBuffer sb = new StringBuffer(src); sb.setCharAt(0, Character.toUpperCase(sb.charAt(0))); return sb.toString(); } else { return null; } } public static void println(Object object){ span(); System.out.println(ToJson(object).toString()); } public static void print(Object object){ span(); System.out.println(ToJson(object,false).toString()); } public static void print(List l){ span(); for(int i=0;i<l.size();i++){ System.out.println(ToJson(l.get(i),false).toString()); } } public static void println(List l){ span(); for(int i=0;i<l.size();i++){ System.out.println(ToJson(l.get(i),true).toString()); } } private static void span(){ System.out.println("/------ Htj2ee: -------------------------------------------------------------------------"); } public static void print(Map m){ List l = (List)m.get("list"); if(l!=null) print(l); } public static void println(Map m){ List l = (List)m.get("list"); if(l!=null) println(l); } }