如何在不使用“查找”的情况下测试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