我如何使用公开 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" 交谈,而是与内存中的一些集合交谈,这些集合只为我们提供脚本化响应。

总之,我们这样安排我们的代码,方便测试哪里出错了。

至于难测位;好吧,也许我们以其他方式衡量风险,或者我们 运行 以不同的节奏进行这些测试,或者我们将它们的测试推迟到功能测试,或者......