DAO测试:正确的方法?

时间:2012-03-30 09:07:03

标签: java hibernate unit-testing dao

我想使用JUnit 4.9测试使用Hibernate 4.1实现的MyTypeDAO类。我有以下问题:

在我的DAO中,我有一个findById方法,它通过ID检索我的类型的实例。如何测试这种方法?

我做了什么:

  1. 我创建了一个我的类型的实例。
  2. 然后,我需要坚持这个实例,但是怎么样?我可以依赖saveMyType方法吗?我不这么认为,因为我在测试用例中,并且没有测试此方法。
  3. 然后,我需要使用在步骤1中创建的实例的ID调用findById方法。
  4. 最后,我检查在步骤1中创建的实例是否等于我在步骤3中创建的实例。
  5. 有什么想法吗?什么是最佳实践?

    我对save方法有同样的问题,因为在运行它之后,我需要检索save实例。在这里,我不认为我可以依赖我的findById方法,因为它尚未经过测试。

    由于

2 个答案:

答案 0 :(得分:4)

一种可能的方法是:

创建内存数据库以进行测试,从预定义的sql脚本加载此数据库的内容,然后针对此数据库测试DAO类。

每次开始测试时,都会使用sql脚本从头开始创建数据库,您将知道哪个id应该返回结果,哪个不应该返回。

See [DbUnit][1](来自satoshi的评论)

答案 1 :(得分:1)

我认为你没有多少选择来实现这一目标。进行正交测试(测试2件事或依赖测试的测试)不是一个好习惯。不过,您应该真正认为此异常有效且快速。你是对的:持久化对象并检索它是一个好主意,测试这个dao层。

其他选项包括在数据库中拥有您确定的记录并在其上测试检索(findById)。第二个测试是坚持一个物体并将其移除拆卸方法。

但实际上,测试加载和保存在一起会更简单,这很有意义。