2

简单的问题。如果我使用 spring-data 为我的 DAO 层生成 CRUD 方法,我还应该针对生成的方法编写单元测试吗?或者这相当于单元测试库代码?

提前致谢。

编辑:为了澄清,我问除了在发布之前运行的一套集成测试之外,是否需要编写单元测试。例如, DAO 层的 findAll() 方法的单元测试将类似于以下内容:

class DepartmentDAOTest extends spock.lang.Specification {
   /* ... */
   def "returns all departments"() {
       setup:
       def result = new List<Department>()
       when:
       result = dao.findAll()
       then:
       result.size() == EXPECTED_SIZE
   }
}

集成测试可能由测试团队或开发人员手动运行,可能在标记新版本之前。这可以使用JWebUnitGeb自动化,并测试每个组件(包括平台)以确保它们在“集成”时按预期工作。

如果我要使用 JdbcTemplate 手动编写 DAO 实现,那么毫无疑问我应该对每个方法进行单元测试。当我对服务层(调用 DAO 层)进行单元测试时,我可以模拟 DAO 层,因此我不会对其进行两次测试。

如果我调用 pdfbox 之类的第三方库来生成 PDF,那么每种方法都可以正常工作(因为它是作为 pdfbox 项目的一部分进行测试的)。我没有测试他们的 drawSquare 方法是否真的画了一个正方形,但是在集成测试期间,我会看到我的导出 PDF 功能正确地以我们想要的方式导出 PDF。

所以这个问题真的应该改写为“我应该在哪个测试阶段测试我对 spring-data 的使用?”

4

2 回答 2

4

不。作为一般规则,不要测试平台。

于 2012-11-03T22:40:59.777 回答
4

首先,根本没有生成代码。我们根据您声明的查询方法构建了一个查询元模型,并动态执行这些查询。简短的回答是:您绝对应该测试声明的这些方法。原因很简单:查询方法声明——无论它们使用派生查询还是手动声明的查询——与您为实体定义的映射元数据交互。因此,检查查询方法的执行以确保您看到预期的结果绝对是合理的。这当然更多的是集成测试和对执行查询的语义检查,而不是经典的单元测试。

于 2012-11-04T07:31:53.260 回答