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的内容很简单,如果需要定制也很方便。