我目前被分配为项目编写测试,是否需要为DAO类编写测试?为DAO编写测试
为DAO编写测试
回答
这取决于:-)
如果你的DAO类仅包含获取从DB实体所需的代码,这是更好地测试他们在不同的集成测试*。要进行单元测试的代码是您可以使用模拟DAO进行单元测试的“业务逻辑”。
[更新] E.g.与EasyMock你可以很容易地为特定的类建立一个模拟(使用它的类扩展,甚至可以模拟具体的类),将它配置为从特定的方法调用中返回一个特定的对象,并将它注入到你的类中进行测试。
EasyMock网站似乎现在正在运行,希望它会很快回来 - 然后您可以检查文档,这是恕我直言,相当干净彻底,有很多代码示例。在你的问题中没有太多细节,我不能给出更具体的答案。如果OTOH,DAO也包含业务逻辑,那么你最好的选择 - 如果你能做到这一点 - 将重构它们并将业务逻辑从DAO中移出,那么你可以应用先前的策略。
但底线是,始终牢记单元测试座右铭“测试可能会破坏的所有东西”。换句话说,我们需要优先考虑我们的任务,并集中精力编写能够以最小的努力提供最大收益的测试。首先为最关键的,最具有bug风险的代码部分编写单元测试。在你看来,代码是非常简单的,不可能破坏的是代码。当然,建议您向具有代表性的具体代码咨询经验丰富的开发人员 - 他们可能知道并注意到您可能没有意识到的陷阱和问题。
*单元测试应该是轻量级的,快速和尽可能与环境隔离。因此,包含调用真实数据库的测试不是单元测试,而是集成测试。尽管技术上它们可以用JUnit(和例如DbUnit)来构建和执行,但它们比真正的单元测试要复杂得多,速度要慢几个数量级。有时这会使得它们不适合在每次小代码更改后执行,因为常规单元测试可能(并且通常应该)被使用。
好主意,确实如此。 – 2010-05-25 08:30:03
这将是一个功能或集成测试 – 2012-09-25 16:58:00
是的。这样做有几个好处。一旦你确定你的DAO层工作正常,后期阶段的缺陷修复就变得容易了。
我会争辩说,我们应该为DAO编写单元测试,并且最大的挑战之一就是测试数据的设置和清理。这就是我认为的框架,比如Spring JDBC测试框架可以让我们通过使用不同的注释来控制事务来帮助我们[例子:@Rollback(true)]。例如,如果您正在测试“创建/插入”操作,Spring将允许您在执行测试方法后完成回滚事务,从而始终保持数据库始终处于其原始状态。
你可以看看这个链接获取更多信息:Spring Testing
这可能是更加有用,当你的集成测试,你不希望一个测试来破坏数据的完整性,这可能会导致另一测试失败。
本书的xUnit Test Patterns为这个问题提供了很多很好的见解。
- 1. 编写DAO的Junit测试用例
- 2. 为Laravel包编写测试
- 3. 为async.parallel编写测试。
- 4. 为tensorflow编写测试
- 5. 单元测试DAO
- 6. DAO单元测试
- 7. Apache Phoenix DAO测试
- 8. 编写JUnit测试
- 9. 在JAVA中为Appium编写测试
- 10. 为`用户#索引'编写Rspec测试
- 11. 如何为此编写rspec 3.1测试
- 12. 为表格控制器编写测试
- 13. 为定价方法编写测试
- 14. 如何为JSF类编写Arquillian测试
- 15. 为随机函数编写测试
- 16. 为Rails插件编写测试
- 17. 如何为GWT servlet编写测试?
- 18. 为框架编写测试注释
- 19. 为Youtube Oauth Api编写测试
- 20. 如何测试为Hibernate实体编写的Arquillian测试类?
- 21. CakePHP:编写壳测试表
- 22. CPPUnit如何编写测试?
- 23. 如何编写JUnit测试?
- 24. 编写额外的测试
- 25. 如何编写测试类
- 26. 试图为主题选择器编写量角器e2e测试
- 27. 如何使用JPA实现测试DAO?
- 28. 测试春天hibernate dao和服务层
- 29. DAO测试的优雅方式
- 30. 使用Mockito和PowerMockito进行DAO测试
你可以给我快速的例子如何从数据库测试getInstance,你有任何链接显示这个?我想到嘲笑DAO – London 2010-05-25 08:34:02
@伦敦,看到我的更新。 – 2010-05-25 08:46:31
感谢您的广泛解释,我使用jMock其类似于easyMock – London 2010-05-25 08:54:40