Java 您如何使用SpringWeb应用程序实现TDD
我正在寻找关于如何以纯TDD方式创建SpringWeb应用程序(使用hibernate)的建议。这意味着您不应该在没有单元测试失败的情况下编写生产代码 您是否会对应用程序上下文的创建进行单元测试?如果是的话,你会怎么做Java 您如何使用SpringWeb应用程序实现TDD,java,spring,hibernate,spring-mvc,tdd,Java,Spring,Hibernate,Spring Mvc,Tdd,我正在寻找关于如何以纯TDD方式创建SpringWeb应用程序(使用hibernate)的建议。这意味着您不应该在没有单元测试失败的情况下编写生产代码 您是否会对应用程序上下文的创建进行单元测试?如果是的话,你会怎么做 当使用java配置而不是xml或基于注释的配置时,TDD spring应用程序会更容易吗?当您编写一个需要springApplicationContext和数据库的测试时,那么这是一个集成测试,而不是单元测试。单元测试的一般规则如下: 他们测试一件事(即,不赞成对其他类/bea
当使用java配置而不是xml或基于注释的配置时,TDD spring应用程序会更容易吗?当您编写一个需要spring
ApplicationContext
和数据库的测试时,那么这是一个集成测试,而不是单元测试。单元测试的一般规则如下:
- 他们测试一件事(即,不赞成对其他类/bean的方法调用)
- 他们有一个精简的设置(即没有将测试数据加载到数据库中,没有事务,没有庞大的应用程序上下文)
- 速度慢(创建数据库连接、将测试数据加载到数据库、连接多个bean的大设置步骤、配置spring等等)
- 脆性(由于许多依赖性)
- 如果它们失败了,您只知道它在执行的50万行代码中的某个地方
FooDao
,不如连接一个IFooDao
,该IFooDao具有byId()
方法并返回POJO。在单元测试中,可以创建返回单个实例的模拟实现
当您想知道真正的FooDao
是否工作时,请为调用byId()
的对象编写几次集成测试
但要避免“从DAO获取对象、处理对象、再次使用DAO保存对象”。这是三个不同的测试(两个IT,一个UT)。因此,您建议,例如,从测试调用其他服务的控制器开始,例如,模拟其他服务,然后编写新的测试来测试该服务,依此类推,直到您达到目标为止?是的。TDD最重要的核心价值之一是“小步走”。当一个测试执行100多行代码时,这几乎不是一个“小步”。