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