我读了很多关于 TDD 的问答和关于 SO 的单元测试,但我没有找到任何答案:我从哪里开始?
我和团队已经完成了几个项目,在这些项目中,我们对代码采用了单元测试……但先编码,然后单元测试。在开发过程的某个阶段,先编写测试然后编写代码变得很自然,这使我们采用了更 TDD 的风格。
现在我们想要迈出下一步,尝试从头开始使用 TDD 开始一个新项目。问题来了……从哪里开始呢?当我根本没有代码时,我要编写的第一个测试是什么?
比方说,为了有一个可以思考的背景,我必须开发一个以文档为中心的互联网应用程序,有一些工作流程和......其他东西。
但让我们从头开始:首先,我想创建一个简单的页面,列出存储在数据库表中的所有文档(元数据)(很简单,呃?)。
我要写的第一个测试是什么?假设我正在使用 Hibernate 访问数据库...我会测试假想方法 getAllDocuments() 吗?但是我应该使用模拟对象来替代 Hibernate 吗?那么我在测试什么?
我在这里有点困惑...而且 getAlDocuments() 可能永远不会成为一种生产方法...所有文档集合都将按某些内容进行排序和过滤...这有意义吗?
任何建议将不胜感激
Edited:
阅读您的答案后(以及类似的帖子http://programmers.stackexchange.com http://programmers.stackexchange.com)我对 TDD 有更好的看法,但我仍然有疑问。
我一直认为 TDD 是首先进行单元测试……从未考虑过端到端测试。
但我要问:TDD 说你必须编写一个测试并看到编译错误;然后你创建类和方法,但测试失败;然后你实现该方法并让测试通过。在测试失败之前你不能编写代码;在所有测试通过之前,您不能编写另一个测试。我在这儿吗?
如何进行端到端测试作为我的第一次测试?我应该在所有层中编写所有代码,以使测试通过。但是然后我将拥有一堆类和方法,所有这些类和方法都通过我的端到端测试进行了测试(我不应该称之为集成测试吗?)。这意味着我不再需要单元测试,因为我已经有一个涵盖我的代码的测试。我无法编写已经通过的测试,这违背了 TDD 实践。
请帮助我理解这进一步的步骤
TDD 不是关于单元测试 - TDD 是关于通过测试驱动您的开发和架构 - 通过您需要的任何类型的自动化测试。你明白重点了吗?
您正在开始一个新项目,并且可能有一组功能。对于要实现的功能,您应该有一些接受标准。这些标准可以定义您的顶级测试。让我们从端到端测试(有时这可能非常困难,因为它涉及尚不存在的 UI)或针对这些验收标准的集成测试开始。一旦测试失败,您将继续实现与大型测试相关的功能,但每个功能都将通过集成或单元测试再次驱动。如果所有顶级测试都通过,则该功能已完成。
如果您跳过大型测试(端到端、集成),您将开发一组经过良好测试的单元,这些单元在集成在一起时将无法工作,或者由于单元测试定义的本地范围,您的架构将不会很好。集成和端到端测试为您提供了全球范围。
书中用大型示例(Java)对此进行了描述以测试为指导不断发展面向对象的软件 http://www.growing-object-oriented-software.com/.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)