junit单元测试基类

自己写了一个用来简化代码的单元测试基类,省的每次都要初始化spring和获取相应的bean对象。

public class BaseTest {
    static ApplicationContext ac = null;
    static {
        ac = new ClassPathXmlApplicationContext(
                new String[] {"/test-*.xml"});
    }
    protected C target;
    public BaseTest() {
    }
    @Before
    public void setUp(){
        Class targetClz = (Class) ((ParameterizedType) getClass()
                .getGenericSuperclass()).getActualTypeArguments()[0];
        String targetClzName = targetClz.getSimpleName();
        String arg0 = targetClzName.substring(0,1).toLowerCase()+targetClzName.substring(1);
        target = (C)ac.getBean(arg0);
    }
}

这样,在测试用例类里就比较简单了:

public class XXXDaoImplTest extends BaseTest{
    @Test
    public void testFindAll() {
        List l = target.findAll();
        assertTrue(l.size()>0);
    }
}

这样做的前提是一定要遵循命名规则 – bean的id是相应类的名的首字母小写,比如 AbcDao的实现是AbcDaoImpl,声明测试类时要给出AbcDao作为泛型参数。当然BaseTest的内容很简单,如果需要定制也很方便。

关于对象图(object graph)的idea

可能一说object graph,有sense的人就想到ognl。没错应该是这样,我在一开始遇到这个问题也是一样的想法。我的最初想法是:有没有一个工具可以把一个实例对象的对象图“路径”全部列出来呢。比如,类Father:

class Father{
String name;
List<Child> children;

}
class Child{
String name,age;
Father father;

}

现在有一个叫王二猫的father,有两个孩子,那么我要的就是:

father.name
father.child[0].name
father.child[0].age
father.child[1].name
father.child[1].age

我不需要知道具体的内容,只需要上面的这些object graph里的路径,当然我会用这些路径获取相应的属性值。ognl和commons-beanutils是把这些路径作为参数来获取相应的属性值,而我想要的就是根据一个存在的对象来生成所有可能的路径串。这样作有甚么意义呢?可能很多人不是很明白我到底想要干什么。其实由来是:我想要动态的方式去遍历对象的所有属性(包括nested属性),然后统一处理,比如想要比较两个对象我不许要写一大堆代码去一个个遍历每个属性,而是根据object graph的路径去动态获取。

可能是“成长”了,最近想的东西很多都是关于动态,脚本。btw,BeanUtils.describe是做不到的,因为得不到nested属性 – 不过似乎可以用它来遍历对象图. – 这样好吗?

Spring SimpleFormController Cheatsheet

pdf下载