【发布时间】:2011-06-16 16:29:49
【问题描述】:
我阅读了很多关于 TDD 和 SO 单元测试的问答,但我没有找到任何答案:我从哪里开始?
我和团队已经完成了几个项目,其中我们对代码采用了单元测试……但首先是代码,然后是单元测试。在开发过程的某个阶段,先编写测试然后编写代码变得很自然,这将我们带入了一种更加 TDD 的风格。
现在我们想进行下一步,并尝试从头开始使用 TDD 开始一个新项目。问题来了……从哪里开始?当我完全没有代码时,我会写的第一个测试是什么?
假设,只是为了考虑一个上下文,我必须开发一个互联网应用程序,以文档为中心,有一点工作流程和......其他东西。 但是让我们从头开始:首先,我想创建一个简单的页面,列出存储在数据库表中的所有文档(元数据)(很简单,嗯?)。 我要写的第一个测试是什么?假设我正在使用 Hibernate 访问数据库...我会测试虚拟方法 getAllDocuments() 吗?但是我应该使用模拟对象来代替 Hibernate 吗?那我在测试什么?
我在这里有点困惑...而且 getAlDocuments() 可能永远不会成为生产方法...所有文档集合都将被排序和过滤...这有意义吗? 任何建议将不胜感激
已编辑:
阅读您的答案(以及http://programmers.stackexchange.com 上的类似帖子)后,我对 TDD 有了更好的认识,但我仍然有一个问题。
我一直认为 TDD 是关于首先进行单元测试...从没想过端到端测试。 但是让我问一下:TDD说你必须写一个测试并看到一个编译错误;然后你创建类和方法,你得到一个测试失败;然后你实现该方法并通过测试。在测试失败之前,您无法编写代码;在所有测试通过之前,您不能编写另一个测试。我在吗?
如何将端到端测试作为我的第一个测试?我应该在所有层中编写所有代码,以使该测试通过。但是我会有一堆类和方法,所有这些类和方法都经过我的端到端测试(我不应该称之为集成测试吗?)。这意味着我不再需要单元测试,因为我已经有一个涵盖我的代码的测试。而且我不能编写已经通过的测试,这违反了 TDD 实践。
请帮助我理解这进一步的步骤
【问题讨论】:
-
我通常从编写自动加载器组件的测试开始。然后对于我添加的每个类。
-
programmers.stackexchange.com/questions/84252/… 就在昨天问了同样的问题。
标签: unit-testing tdd