如何在不使用“查找”的情况下测试DAO中的“添加”?

在下面的代码中,问题是,我不能使用dao.list()。size()来测试dao.add () ,反之亦然。

这种方法是正常还是不正确? 如果不正确,如何改进?

public class ItemDaoTest {

    // dao to test
    @Autowired private ItemDao dao;

    @Test 
    public void testAdd() {
        // issue -> testing ADD but using LIST

        int oldSize = dao.list().size();
        dao.add(new Item("stuff"));
        assertTrue (oldSize < dao.list().size());
    }

    @Test
    public void testFind() {
        // issue -> testing FIND but using ADD

        Item item = new Item("stuff")
        dao.add(item);
        assertEquals(item, dao.find(item.getId()));
    }
}

我认为你的测试是如上所述的有效集成测试,但是我会使用Add来帮助测试Find和反之。在某个级别上,你必须让自己把信任放在你的最低级别的集成上依赖。 我意识到在测试中存在对其他方法的依赖关系,但我发现Add和Find方法是非常容易验证的“低级”方法。 它们基本上是相互检验的,因为它们基本上是反向的。

添加可以轻松构建查找的先决条件

查找可以验证添加是否成功。

我想不出任何一种情况都不会被你的测试所发现


你的testAdd方法有一个问题:它依赖于ItemDao.list正常运行的假设,而ItemDao则是你正在测试的类。 单元测试意味着独立,所以更好的方法是使用普通的JDBC -as @Amir表示 - 来验证记录是否在数据库中引入。

如果您使用Spring,则可以在AbstractTransactionalDataSourceSpringContextTests上转发以访问JDBCTemplate设施,并确保在执行测试后进行回滚。


我使用直接JDBC(使用Spring的JdbcTemplate)来测试DAO方法。 我的意思是我调用DAO方法(这是Hibernate基础),然后使用JDBC直接SQL调用来确认它们。

链接地址: http://www.djcxy.com/p/10595.html

上一篇: How to test "add" in DAO without using "find" etc.?

下一篇: Click Tracking Windows Applications