我如何使用公开 API 并与数据库对话的应用程序来练习高效的 TDD
How do I practice efficient TDD with applications that exposes API and speaks to database
我倾向于编写很多应用程序,比如说,将 API 暴露给一个逻辑,该逻辑将调用同一逻辑中的其他 API,然后持久化某种形式的数据最后到数据库。所以,换句话说,我倾向于有一个方法调用,封装调用其他 APIs,处理数据,然后持久化到数据库。
我熟悉TDD(测试驱动开发),但我觉得很难实践,因为我最不想要的是在生产数据库中持久化无用数据,同时运行强制测试,并且还调用我无法控制的外部 API 反过来又搞乱了他们的数据库。
我可能看错了。
如何练习高效的 TDD 并规避这个问题?
How do I practice efficient TDD and evade this problem?
设计。
粗略地,我们安排我们的代码,使其成为两种风格的模块的组合
- 易于测试的模块
- 简单稳定的模块
所以真正需要与数据库对话的代码应该属于第二种;没有分支,琐碎的操作,最重要的是它不需要经常改变。
我们编写的代码本身就存在风险?进入 "easy to test" 模块。这些模块只是松散地耦合到它们更简单的表兄弟——用 "test" 实现替换 "real" 应该很容易。因此,我们在测试期间不与 "the database" 交谈,而是与内存中的一些集合交谈,这些集合只为我们提供脚本化响应。
总之,我们这样安排我们的代码,方便测试哪里出错了。
至于难测位;好吧,也许我们以其他方式衡量风险,或者我们 运行 以不同的节奏进行这些测试,或者我们将它们的测试推迟到功能测试,或者......
我倾向于编写很多应用程序,比如说,将 API 暴露给一个逻辑,该逻辑将调用同一逻辑中的其他 API,然后持久化某种形式的数据最后到数据库。所以,换句话说,我倾向于有一个方法调用,封装调用其他 APIs,处理数据,然后持久化到数据库。
我熟悉TDD(测试驱动开发),但我觉得很难实践,因为我最不想要的是在生产数据库中持久化无用数据,同时运行强制测试,并且还调用我无法控制的外部 API 反过来又搞乱了他们的数据库。
我可能看错了。
如何练习高效的 TDD 并规避这个问题?
How do I practice efficient TDD and evade this problem?
设计。
粗略地,我们安排我们的代码,使其成为两种风格的模块的组合
- 易于测试的模块
- 简单稳定的模块
所以真正需要与数据库对话的代码应该属于第二种;没有分支,琐碎的操作,最重要的是它不需要经常改变。
我们编写的代码本身就存在风险?进入 "easy to test" 模块。这些模块只是松散地耦合到它们更简单的表兄弟——用 "test" 实现替换 "real" 应该很容易。因此,我们在测试期间不与 "the database" 交谈,而是与内存中的一些集合交谈,这些集合只为我们提供脚本化响应。
总之,我们这样安排我们的代码,方便测试哪里出错了。
至于难测位;好吧,也许我们以其他方式衡量风险,或者我们 运行 以不同的节奏进行这些测试,或者我们将它们的测试推迟到功能测试,或者......