我正在尝试开始使用TDD但是我立刻不确定我应该测试什么时候和什么。我正在开展的一个新项目中的前两个任务如下。
1)在REST端点上接收一些JSON格式的数据并将其保存在数据库中。说数据是几个车记录 -
{ “汽车”: [{ “make”:“福特”, “颜色”:“蓝色”, “年”:“2010”, “for_sale”:是的 },{ “make”:“bmw”, “颜色”:“黑色”, “年”:“2011”, “for_sale”:false } ]}
这样数据就会到达REST端点,我需要将它保存在数据库中。我是否需要对此任务进行测试?如果是,那么它应该是什么样的?
2)从数据库中检索一些记录并将其显示在视图/网页中(即使用一些模板系统)。假设记录是上面的汽车记录,它们应显示如下 -
<ul id="cars"> <li id="car-1"> <div><span>Make:</span><span>Ford</span> </div> <div><span>Color:</span><span>blue</span> </div> <div><span>Year:</span><span>2010</span> </div> <div><span>For sale:</span><span>Yes</span> </div> </li> <li id="car-2"> <div><span>Make:</span><span>BMW</span> </div> <div><span>Color:</span><span>black</span> </div> <div><span>Year:</span><span>2011</span> </div> <div><span>For sale:</span><span>No</span> </div> </li> </ul>
所以我需要对此任务进行测试,如果是,那么它应该是什么样的?
答案 0 :(得分:3)
您使用的是哪种语言,平台等?也许我们可以为您找到一些例子。
一开始TDD很棘手,像这样的任务(使用数据库和Web部件)需要在多个级别进行测试。首先将任务划分为可以进行单元测试的单一职责(可能映射到班级)。例如,一个接受JSON输入的类,并用一个属性对其进行水合,TDD就是这个类。数据库层很难进行单元测试,我们通常使用Repository模式,然后在测试其他类时进行模拟。
数据库单元测试很难,因此请考虑围绕数据库进行“接受”或“集成”测试。这可能是连接到真实测试数据库的测试,放入一些测试数据,再次将其拉出,并验证它看起来是否正确。理论上,你甚至不关心它是什么数据库,只要你存储的东西再次出现,你知道它正在工作。
HTML / web测试最好使用selenium webdriver等工具在高级别上完成,它允许您编写测试代码,激活真实浏览器,与您的页面交互,并断言内容/行为与预期一致。
通过与已经了解它的人进行结对编程,或者通过参加课程或培训课程,可以很好地学习这些东西。还有很多书籍博客和教程,让你可以在沙盒中学习,这比在一个真实的项目中自己学习更简单,在这个项目中,完成工作的压力与学习相冲突。
编辑:Java和Play框架。 好吧,我不知道具体的播放框架,但是从快速看看它可能会为你设置正确的JSON解析,这会将json解析函数减少到样板代码。 TDD在这里没有太大的价值,但如果你愿意,你可以。同样,有一个活动记录样式的数据库层?因此,在您的库提供的测试代码中没有太多价值(并且dbs很难/不可能/无意义*进行单元测试)。
编辑:编辑 - 这显然是icky,显然是Play uses static controller methods which makes it hard to unit test (because you can't inject dependencies - which makes mocking difficult)。我担心如果不进行数小时的研究,我就无法解决这些问题,但集成测试可能就是这里的方法,它可以测试几个代码单元,包括数据库。
总结如下:
*根据您的测试信念删除。