【发布时间】:2009-05-09 01:39:14
【问题描述】:
我经常遇到这个问题,但我不知道如何克服这个障碍。我真的很想开始学习和应用测试驱动开发(或 BDD 或其他),但似乎我想要应用的每个应用程序几乎只是标准数据库 CRUD 的东西,我不确定如何去应用它。除了持久化到数据库之外,这些对象几乎什么都不做。没有需要测试的复杂逻辑。有一个网关,我最终需要测试第 3 方服务,但我想先完成应用的核心。
每当我尝试编写测试时,我最终只会测试我可能不应该首先测试的基本东西(例如 getter/setter),但看起来对象没有其他任何东西。我想我可以测试持久性,但这对我来说似乎永远不对,因为你不应该真正访问数据库,但是如果你模拟它,那么你真的没有测试任何东西,因为你控制了吐回的数据;就像我看过很多例子,其中有一个模拟存储库,它通过循环和创建已知值列表来模拟数据库,并且测试验证“存储库”可以拉回某个值......我是没有看到这样的测试的意义,因为“存储库”当然会返回那个值;它在课堂上是硬编码的!好吧,我从纯 TDD 的角度来看它(即,您需要进行测试,说明您的存储库需要 GetCustomerByName 方法或其他任何方法,然后才能编写方法本身),但这似乎无缘无故地遵循教条“方式”——除了证明方法的合理性之外,测试似乎没有做任何有用的事情。
我是不是想错了?
例如运行工厂联系人管理应用程序。我们有联系人,假设我们可以向联系人发送消息。因此,我们有两个实体:Contact 和 Message,每个都有共同的属性(例如,名字、姓氏、联系人的电子邮件以及消息的主题和正文和日期)。如果这些对象都没有任何实际行为或需要执行任何逻辑,那么在设计这样的应用程序时如何应用 TDD?该应用程序的唯一目的基本上是拉出联系人列表并将其显示在页面上,显示表单以发送消息等。我在这里没有看到任何有用的测试——我可以想到一些测试,但它们几乎是为了说“看,我有测试!”而进行的测试。而不是实际测试某种逻辑(虽然 Ruby on Rails 很好地利用了它,但我并不认为测试验证是一个“有用的”测试,因为它应该是框架为你处理的事情)
【问题讨论】:
-
我只想说...我喜欢这个问题的标题。
-
这是一个很好的问题。我相信大多数时候,当我们听到关于 TDD 成本合理性的争论时,他们确实是专门谈论类似 CRUD 的应用程序。
-
这也是我注意到的。我想要使用 TDD(不一定是 TDD,而是测试),但是当应用程序只需要提取数据时,我永远无法想到要测试什么 - 不过,我在这里得到了一些很好的回复。
标签: tdd