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

  • 相关阅读:
    一个涉及到浮点寄存器的CM
    树和二叉树一篇就搞定!
    串的两种模式匹配方式(BF/KMP算法)
    队列的知识讲解与基本实现(数据结构)
    如何用C++实现栈
    判断List集合为空还是null的正确打开方式
    双链表的基本实现与讲解(C++描述)
    Redis从认识安装到实现增删改查
    如何使用C++实现单链表
    线性表——顺序表的实现与讲解(C++描述)
  • 原文地址:https://www.cnblogs.com/mypm/p/1941596.html
Copyright © 2020-2023  润新知