【发布时间】:2012-04-06 03:16:59
【问题描述】:
我一直在查看 EasyMock 以及将其用于单元测试 DAO 类的教程/示例,用于“外部容器”测试。但是,我认为他们中的大多数人都在谈论测试服务层,而是模拟 DAO 类。我有点迷茫,你真的是这样对DAO层进行单元测试的吗?
有些人会说与 DB 和 EJB 交互的测试实际上是集成测试,而不是单元测试,但是您如何知道您的 SQL 是否正确(假设没有 ORM)以及您的 DAO 从您的真实数据中插入/查询正确的数据(读取,类似于生产中的本地数据库)数据库?
我读到 DBUnit 是针对这种情况的解决方案。但我的问题是关于使用像 DBUnit “外部容器”这样的框架。如果 DAO 依赖于某些 EJB 会怎样,我们如何处理事务,如果有触发器更新插入时的其他表会发生什么?
仅对具有此类依赖关系的 DAO 进行单元测试的最佳方法是什么?
【问题讨论】:
-
我认为测试 DAO 方法不是一个好主意,因为在这种情况下,您正在测试查询和底层 ORM 框架(如果您使用的话)。我阅读了其他人的 cmets,我看到许多人提供了针对 DAO 方法执行单元测试并在这种情况下使用内存数据库的建议。我不知道他们是否试图实现这一点,但这里的问题是不同的数据库在某些情况下会导致不同的语法,并且不要告诉我 ORM 层可以让你摆脱这种情况,它可以,但你的测试仍然不一致你对不同的数据库执行它们。
-
(...continue of previous comment) 那么,不一致的测试有什么意义呢?这种测试不会测试任何东西,并且会让您对使用主题测试的功能的正确性产生扭曲的看法。同时它给项目带来了很多问题。
标签: unit-testing dao easymock dbunit