巧用Junit 静态变量

在Junit 中 setUp(),tearDown() 方法不是在测试类初始化和消毁时被分别执行,是在运行测试类的每一个测试方法前和运完这个方法后被执行
如果想在测试类的多个测试方法中,共享一些数据,需要特别注意,下面我们来看这个测试类HibernateGroupDAO
因group的groupId 是自动生成,在测试group的插入(新增中)中,新增后把group的groupId,付值给 HibernateGroupDAOTest中的全局变量groupId

然后,在测试查询,修改和删除中,
用HibernateGroupDAOTest中的全局变量groupId来测试,结果是测试不通过,在博最后部分会给出一个很简单的解决办法,既巧用Junit 静态变量

package com.jawasoft.core.security.dao;

import java.util.Collection;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import com.jawasoft.core.AbstractCoreTestCase;
import com.jawasoft.core.security.Group;

/**
* Test case for <code>HibernateGroupDAOTest</code>
*
* @author liuyg - MYPM Objects
* @since 2.0
*/
public class HibernateGroupDAOTest extends AbstractCoreTestCase {

    protected static Log log = LogFactory.getLog(HibernateGroupDAOTest.class);

    // Instance under test
    private GroupDAO dao;

    pirvate Integer groupId = null;

    public HibernateGroupDAOTest(String name) {
        super(name);
    }

    protected void setUp() throws Exception {
        super.setUp();

        // Retrieve the instance under test from spring context. Make sure that
        // it is an HibernateGroupDAO
        dao = (GroupDAO) context.getBean("GroupDAO");
        
    }

    public void testInsert() {
        assertNull(dao.findByName("parentNone"));

        Group group = new Group();
        group.setName("parentNone");
        group.setDescription("Test group for insert method parent = none");

        assertTrue(dao.insert(group));
        assertNotNull(dao.findByName("parentNone"));
       groupId = Group.getId();
        // Test with parentGroup Not Empty
        assertNull(dao.findByName("parentNotEmpty"));
    }

    public void testFindById() {
        Group group = dao.findById(groupId);
        assertNotNull(group);
        assertEquals("parentNone", group.getName());
    }
   
    public void testUpdate) {
            Group group = dao.findById(groupId);
          assertNull(group);
        group.setName("updateName");
          group.setDescription("Test group for update method");

          boolean result = dao.update(group);
          assertNotNull(dao.findByName("updateName"));
          assertTrue(result);
          group = dao.findByName("updateName");
          assertEquals("updateName", group.getName());
    }
    public void testDelete() {
        assertNotNull(dao.findById(groupId));
        assertTrue(dao.delete(groupId));
        assertNull(dao.findById(groupId));
    }

}


为什么不通过呢在测试,查询,修改和删除的方法中,原因很简单,在运行查询,修改和删除的方法前, setUp(),又分别被执行了三次
HibernateGroupDAOTest中的全局变量groupId也被重新初始化了三次,并不是运行testInsert时所付的值
那有办法解决吗,当然,巧用Junit 静态变量,只要把private Integer groupId = null;改为
private static Integer groupId = null;
既可,在 setUp()方法中,不初始化静态变量

原文地址:https://www.cnblogs.com/mypm/p/1941596.html