我在SO上阅读了很多关于TDD和单元测试的问题和答案,但没有找到回答这个问题的内容:我应该从哪里开始?
我和我的团队已经完成了几个项目,采用了单元测试来测试我们的代码...但是我们的做法是先写代码再写单元测试。在开发过程的某个阶段,很自然地先写测试再写代码,使我们更符合TDD的风格。
现在我们想要迈出下一步,尝试从头开始用TDD开始一个新项目。问题在于...从哪里开始?当我什么代码都没有时,我应该编写哪个测试呢?
假设,只是为了有一个思考的上下文,我必须开发一个互联网应用程序,以文档为中心,有一个小工作流和...其他一些东西。 但是让我们从头开始:首先,我想创建一个简单的页面,列出存储在DB表中的所有文档(元数据)(相当简单,不是吗?)。 我应该编写哪个测试呢?假设我正在使用Hibernate来访问数据库...我应该测试假设的方法getAllDocuments()吗?但是我应该使用模拟对象来替换Hibernate吗?那我在测试什么呢?
我有点困惑...而且getAlDocuments()可能永远不会成为一个生产方法...所有文件的集合都将按某种方式进行排序和过滤...这有意义吗? 任何建议都将不胜感激
编辑:
在阅读了您的答案(以及http://programmers.stackexchange.com中类似的线程)之后,我对TDD有了更好的理解,但我仍然有疑问。
我一直认为TDD是关于先编写单元测试...从来没有想到过端到端测试。 但是让我问一下:TDD说您必须先编写测试并看到编译错误;然后创建类和方法,然后获得测试失败;然后实现该方法并通过测试。在有测试失败之前,您不能编写代码;在所有测试通过之前,您不能编写另一个测试。我在这里是正确的吗?
我应如何将端到端测试作为我的第一个测试?我应编写所有层的代码,以让该测试通过。但这样一来,我的端到端测试(虽然应该称为集成测试)会测试一堆类和方法。这意味着我不再需要单元测试,因为我已经有了一个覆盖我的代码的测试。但是,我不能编写已经通过的测试,这违反了TDD原则。请帮助我更深入地理解这一步骤。