我有这个类,我想用TDD构建,但我失败了.这是一个非常基本的类SubMissions,它所做的就是从SQL数据库中获取一些数据.
因此,它具有类似的方法getSubMissionForPage(),getSubMissionFromId()等等.
我尝试使用TDD构建它.我的第一个测试包含一个调用getSubMissionPage(),其唯一目的是返回数据.所以让这个测试失败是相当困难的,因为它可以返回任何数据,我无法想出一种让它失败的方法.
我知道让你的测试失败是知道要实现什么的第一步,但是当你真的无法通过测试时你会怎么做?
每当您依赖外部数据源时,您的测试总是会失败.如果连接被丢弃到您的数据库怎么办?如果表中不存在您尝试从中获取数据,该怎么办?如果您获得的数据不是您期望的数据怎么办?
连接到DB的测试类比测试HelloWorld.java要棘手一些,因为你需要一些方法来模拟数据库.您可以在此处了解有关Mock Objects的更多信息.
简而言之,您的测试/软件总是会失败.如果你认为你的测试不能失败,你就不会对问题空间进行足够的思考.
从数据库中检索不是从TDD开始的地方.
你可能会在网上看一些TDD的例子.鲍勃马丁的保龄球比赛得分是一个有趣的起点.
话虽如此 ...
我的第一个测试包含对getSubMissionPage()的调用,其唯一目的是返回数据.所以让这个测试失败是相当困难的,因为它可以返回任何数据,我无法想出一种让它失败的方法.
目的不是返回数据,而是返回正确的数据.
对此进行测试的方法是为其提供一个数据库,该数据库应该返回一个特定的结果并查看它.当然,除非你编写正确的代码,否则你将首先编写测试,然后在看到它失败后再进行真正的实现.
TDD涉及数据库的困难部分是使用真实数据库进行测试可能会很慢并且使测试可重复性很难,因为您的测试有时会更改数据.要处理这些问题,您可以从DbUnit,模拟JDBC,使用内存数据库等工具中获得帮助,并使用回滚来确保您的测试不会进行永久性更改.
但你最好不要从数据库的东西开始.
| 归档时间: |
|
| 查看次数: |
292 次 |
| 最近记录: |