【发布时间】:2013-09-04 16:27:43
【问题描述】:
我正在寻找有关如何以纯 TDD 方式创建 Spring Web 应用程序(使用休眠)的建议。这意味着您不应该在没有先进行单元测试失败的情况下编写生产代码。
您是否会对应用程序上下文的创建进行单元测试?如果是,你会怎么做?
使用 java 配置而不是基于 xml 或注解的配置时,TDD 一个 Spring 应用会更容易吗?
【问题讨论】:
标签: java spring hibernate spring-mvc tdd
我正在寻找有关如何以纯 TDD 方式创建 Spring Web 应用程序(使用休眠)的建议。这意味着您不应该在没有先进行单元测试失败的情况下编写生产代码。
您是否会对应用程序上下文的创建进行单元测试?如果是,你会怎么做?
使用 java 配置而不是基于 xml 或注解的配置时,TDD 一个 Spring 应用会更容易吗?
【问题讨论】:
标签: java spring hibernate spring-mvc tdd
当您编写需要 Spring ApplicationContext 和数据库的测试时,这就是集成测试,而不是单元测试。单元测试的一般规则是:
另一方面,集成测试:
因此,对于 TDD,您尝试构建可以在没有 Spring 的情况下创建的 bean。以您不必启动 Hibernate 或数据库的方式编写它们。这里的主要原因是 TDD 需要每天运行数百次单元测试。如果它们运行的时间超过 10 秒,您最终会觉得等待测试完成是在浪费时间。
下一个问题通常是如何以这种方式测试任何有用的东西。好吧,这样想:Hibernate 有效。它已经有许多单元测试。测试hibernate是浪费时间。所以你应该在你的应用程序中创建一个层,从代码中完全隐藏 Hibernate。
不要连接FooDao,而是连接一个IFooDao,它具有byId() 方法并返回一个POJO。在单元测试中,您可以创建一个返回单个实例的模拟实现。
如果您想知道真正的FooDao 是否有效,请为调用byId() 几次的代码编写集成测试。
但要避免“从 DAO 获取对象,处理对象,再次使用 DAO 保存对象”。这是三个不同的测试(两个 IT,一个 UT)。
【讨论】: