Spring 如何将TDD应用于逐层设计的软件包?
我已经读了很多关于TDD的书,特别是关于各种实践和经验,注意事项和不注意事项,在尝试将它应用到一个具有持久性和REST的Spring Boot应用程序上后,我仍然对几个方面感到困惑,所有这些都是由特性打包的 StackOverflow上的许多博客帖子和答案建议我们应该测试接口,而不是实现。 然而,像Steve Freeman和Nat Pryce的“由测试引导的不断增长的面向对象软件”中的例子表明了完全不同的方法, 因为所有这些测试都主要测试实现,断言方法调用的数量等等,所以我们的测试实际上依赖于实现本身。 当然,我们可以使用控制反转-通过构造函数传递依赖项并在测试中模拟它们,但是模拟CRUD存储库真的有意义吗 也许我会给你一个简单的例子来更好地描述这种情况。 假设我们有一个多页的用户信息表单,每个表单页面必须单独保存 因此,信息包的计划结构可以类似于以下按功能包的方法:Spring 如何将TDD应用于逐层设计的软件包?,spring,rest,tdd,persistence,integration-testing,Spring,Rest,Tdd,Persistence,Integration Testing,我已经读了很多关于TDD的书,特别是关于各种实践和经验,注意事项和不注意事项,在尝试将它应用到一个具有持久性和REST的Spring Boot应用程序上后,我仍然对几个方面感到困惑,所有这些都是由特性打包的 StackOverflow上的许多博客帖子和答案建议我们应该测试接口,而不是实现。 然而,像Steve Freeman和Nat Pryce的“由测试引导的不断增长的面向对象软件”中的例子表明了完全不同的方法, 因为所有这些测试都主要测试实现,断言方法调用的数量等等,所以我们的测试实际上依赖于
com
.. example
.... user
...... information
........ basic
.......... + BasicInformationDto
.......... + BasicInformationService
.......... - BasicInformationServiceImpl
.......... - BasicInformationDao
.......... - BasicInformationRepository
........ additional
.......... + AdditionalInformationDto
.......... + AdditionalInformationService
.......... - AdditionalInformationServiceImpl
.......... - AdditionalInformationDao
.......... - AdditionalInformationRepository
........ + InformationRestController
+ is public and - is default access modifier
我的第一个想法是:
在执行TDD/BDD时,以已知设计为目标是完全正常的,因为您的框架需要它,或者因为该设计已经在程序的其他垂直部分中建立。只有最极端的TDDER开始时没有框架。你不想做的是构建一个框架不需要的大设计,而测试和重构还没有告诉你你需要什么。我对Spring一无所知,但似乎你已经设计了所有的类,然后尝试使用TDD进行开发。TDD的思想是,你不需要预先设计类,而是让设计随你去。好吧,我想这是一种混合的技术,因为使用方法包技术,你可能会预见到这种结构,或者至少在进行TDD时记住它。我只是想知道,当CRUD存储库开始使用时,人们实际上是如何进行TDD的。它们已经足够抽象了,但我们不能真的嘲笑它们是现实的。所以,我如何使用TDD为在实现中使用CRUD存储库接口的服务设计代码,因为我发现“服务应返回与存储库相同的id”之类的测试根本没有用处?