如何应用测试驱动开发在数据库上存储数据?
How to apply test-driven development for storing data on db?
让我们假设我必须开发的下一个功能是在数据库中存储一些数据。按照 TDD 范式,我必须首先编写一个失败的测试。考虑到我正在使用 JDBC,我不清楚如何完成这项任务。
我能想到的最简单的方法是定义一个函数“storeDataOnDB”,并使用像 Mockito 这样的框架检查该函数是否被调用一次。我不喜欢这个解决方案。让我们继续 TDD 方法,接下来我将编写使测试通过的最少代码量。只需调用该函数即可使测试通过,但我实际上并未在数据库中存储任何内容。此外,我没有检查我是否存储了正确的数据。
另一种解决方案是使用测试数据库实施集成测试并验证数据是否正确存储。但这是一个集成测试,而在 TDD 中我正在尝试编写一个单元测试。
那么,在此功能上应用 TDD 的最佳方法是什么?
谢谢。
in TDD I am trying to write a unit test.
您应该放弃此约束——TDD 与“单元”测试无关,实际上不是(请参阅示例测试驱动开发 的第 32 章)。它是关于“程序员”测试的——在编写代码时充当脚手架的小规模测试。
测试是为了满足您的需求,而不是相反。
不过,您应该知道一个技巧:您通常需要一种将复杂逻辑与实际与数据库通信的部分分开的设计。两者之间有一个接缝(参见 有效地使用遗留代码,第 4 章),允许您为需要与数据库对话的部分编写具有替代实现的测试。
实际与数据库对话的部分?理想的代码是“如此简单,显然没有缺陷”。这里的期望是,如果我们让代码足够乏味,那么在我们做对之后就不需要经常更改它(通常这种代码在最终完全删除之前一直保持不变)。
TDD is an awareness of the gap between decision and feedback during programming, and techniques to control that gap.
“单元测试”不是唯一允许的技术。
让我们假设我必须开发的下一个功能是在数据库中存储一些数据。按照 TDD 范式,我必须首先编写一个失败的测试。考虑到我正在使用 JDBC,我不清楚如何完成这项任务。 我能想到的最简单的方法是定义一个函数“storeDataOnDB”,并使用像 Mockito 这样的框架检查该函数是否被调用一次。我不喜欢这个解决方案。让我们继续 TDD 方法,接下来我将编写使测试通过的最少代码量。只需调用该函数即可使测试通过,但我实际上并未在数据库中存储任何内容。此外,我没有检查我是否存储了正确的数据。
另一种解决方案是使用测试数据库实施集成测试并验证数据是否正确存储。但这是一个集成测试,而在 TDD 中我正在尝试编写一个单元测试。
那么,在此功能上应用 TDD 的最佳方法是什么? 谢谢。
in TDD I am trying to write a unit test.
您应该放弃此约束——TDD 与“单元”测试无关,实际上不是(请参阅示例测试驱动开发 的第 32 章)。它是关于“程序员”测试的——在编写代码时充当脚手架的小规模测试。
测试是为了满足您的需求,而不是相反。
不过,您应该知道一个技巧:您通常需要一种将复杂逻辑与实际与数据库通信的部分分开的设计。两者之间有一个接缝(参见 有效地使用遗留代码,第 4 章),允许您为需要与数据库对话的部分编写具有替代实现的测试。
实际与数据库对话的部分?理想的代码是“如此简单,显然没有缺陷”。这里的期望是,如果我们让代码足够乏味,那么在我们做对之后就不需要经常更改它(通常这种代码在最终完全删除之前一直保持不变)。
TDD is an awareness of the gap between decision and feedback during programming, and techniques to control that gap.
“单元测试”不是唯一允许的技术。