巧用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()方法中,不初始化静态变量