TDD假定接口已经定义;如何应对?

时间:2010-12-15 14:59:04

标签: tdd

要在代码之前编写测试,您需要有一种方法来与代码进行交互。测试倾向于提前定义接口,以便可以编写测试。

但是,经常开发一个好的实现包括发明一组良好的组件间接口,多次调整和重新构建这些接口。在此过程中,您要么继续重写测试代码的大部分内容,要么让测试落后于代码。

是否有任何最佳做法可以缓解这种情况?

4 个答案:

答案 0 :(得分:14)

这听起来像整个红绿重构循环。也就是说,TDD - 有点 - 关于这种接口的重写。这使他们保持精益和重点。一旦你掌握了TDDing,并且你编写面向接口的测试,并保持你的对象很小,你不应该看到很多变化,除非你遇到一些不可预测的东西,必须适应,这是敏捷的点(这是希望你为什么要TDDing)

听起来有点像你一次性定义整个界面。哪个是错的。一个测试应该在接口中生成一个函数,并且它是预期的行为。您的界面将与测试套件一起增长,从而最大限度地减少任何反向修补。

答案 1 :(得分:5)

正如您编写测试就好像您正在测试的代码已经编写一样,您可以(并且应该)编写它们,就好像已经编写了接口一样。这是设计部分 - 测试驱动设计中最重要的部分。您知道您正在考试的课程要求您提供哪些功能;编写测试,好像该功能已经存在。您在测试中使用的名称和参数;你自然会想到的是,作为代码和接口的客户端进行测试;这些元素在您的类及其界面的设计中占有突出地位。

答案 2 :(得分:0)

我同意@Per Fagrell -s“界面将随着时间的推移而增长”。

替代方案:如果您正在创建具有广泛功能的业务类,那么如何为不同方面或子功能定义多个接口

答案 3 :(得分:0)

失败的单元测试不仅是检查失败。单元测试编译失败也可视为失败的测试。因此,编写单元测试时,接口就在那里。

TDD - 测试驱动设计 - 设计意味着改变接口。