我在应用程序中有很多实体,我使用 JPA 实现来持久化它们,因此跨 DAO 的大多数 CRUD 方法都是相似的(参见下面的示例类图)。
为此,有接口(interface) DAOTemplate
,它包含可用于所有实体的方法,并由抽象类 AbstractDAO
实现。
一些实体需要额外的方法,例如 User
实体的 findByEmail
。为此目的,有带有此类方法的 DAO 接口(interface),例如UserDAO
.
现在我想为所有方法(DAOTemplate
和UserDAO
中的方法)编写集成测试。什么是最好的解决方案?我应该以某种方式(如何?)测试 AbstractDAO
然后只测试 UserDAOTest
中的特殊方法,还是应该测试 UserDAOTest
中的所有方法以及其他测试其他实体的案例?我试图避免第二种解决方案,因为我不喜欢它。
感谢您的回答。
最佳答案
您应该测试 UserDAOTest 中的所有方法,因为调用它们会产生不同的结果,具体取决于您尝试保留的实体。您不仅要测试您的 DAO 代码,还要测试您的实体、它们的注释和它们之间的关系。
但是按照 DRY 原则,您不应该在每个测试中重新实现 AbstractDAO 方法,但是您可以创建一个所有 UserDAOTest 都继承自的 AbstracDAOTest。让你的测试像这样匹配你的代码应该看起来很不错..
关于Spring、JPA——测试抽象类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9990339/