2012-03-30 59 views
4

我想测试我的类MyTypeDAO使用JUnit 4.9与Hibernate 4.1实现。我有以下问题:DAO测试:正确的方法?

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

我所做的:

  1. 创建我的类型的实例。
  2. 然后,我需要坚持这个实例,但是如何?我可以依靠我的saveMyType方法吗?我不这么认为,因为我在测试案例中,而且这种方法没有经过测试。
  3. 然后,我需要调用findById方法与第1步​​
  4. 最后创建的实例的ID,我检查在步骤1中创建的实例等于一个我在一步得到3

有什么想法?什么是最佳实践?

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

感谢

回答

4

一种可能方式是:

中创建一个存储数据库进行测试,从预定义的SQL脚本这个数据库的负载内容andthen测试你的DAO类针对这个数据库。

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

See [DbUnit][1](从聪的评论)

+1

+1 ...此外,DbUnit大大简化了这项工作,请看看它。 – satoshi 2012-03-30 09:14:32

+1

另一个用于dbUnit的+1。如果您确实使用它,请使用export to xml功能。这样你可以编辑所有表格,然后创建xml:节省大量时间。 – 2012-03-30 09:30:50

1

我不认为你有很多选择,以实现这一目标。正交试验(测试2项或依赖试验)并不是一个好习惯。尽管如此,你应该真的考虑这个异常有效和快速。你是对的:坚持一个对象并检索它是测试这个dao层的好主意。

其他选项包括在数据库中记录您确定的记录并对其进行检索(findById)。而第二个测试是坚持一个对象并将其拆除的方法。

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

+0

似乎我不是被迫进行正交测试。例如,DBUnit提供了从数据库中获取数据的可能性,所以我可以假设DBUnit代码已经过测试,而且我用DBUnit得到的数据实际上是数据库中的数据。你怎么看? – 2012-04-01 17:06:58