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