简单的问题。如果我使用spring-data为我的DAO层生成CRUD方法,我还应该针对生成的方法编写单元测试吗?或者那相当于单元测试库代码?
提前致谢。
编辑:为了澄清,除了在发布之前运行的一套集成测试之外,我还在询问是否需要编写单元测试。例如,DAO层的findAll()方法的unit test将类似于以下内容:
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
}
}
而integration test可能由测试团队或开发人员手动运行,可能在标记新版本之前。这可以使用JWebUnit或Geb自动执行,并测试每个组件(包括平台),以确保它们在“集成”时按预期工作。
如果我使用JdbcTemplate手动编写DAO实现,那么毫无疑问我应该对每个方法进行单元测试。当我对服务层(它调用DAO层)进行单元测试时,我可以模拟DAO层,所以我不会测试它两次。
如果我打电话到pdfbox这样的第三方库来生成PDF,那么每种方法的工作都会有所期望(因为它是作为pdfbox项目的一部分进行测试的)。我不测试他们的drawSquare方法确实绘制了正方形,但在集成测试期间,我会看到我的导出PDF功能正确地按照我们想要的方式导出PDF。
所以这个问题应该重新措辞,“我应该在哪个测试阶段测试我对spring数据的使用?”
答案 0 :(得分:4)
没有。作为一般规则,不要测试平台。
答案 1 :(得分:4)
首先,根本没有生成代码。我们根据您声明的查询方法构建了一个查询元模型,并动态执行这些查询。这里简短的回答是:你肯定应该测试这些声明的方法。原因很明显,因为它很简单:查询方法声明 - 无论是使用派生查询还是手动声明的 - 都与您为实体定义的映射元数据进行交互。因此,检查查询方法执行以确保您看到预期结果是绝对合理的。这当然是对执行的查询的更多集成测试和语义检查,而不是经典的单元测试。