TDD应该为测试用例创建一个空类吗?

eth*_*far 2 testing tdd methodology unit-testing class

我是TDD的新手并且我很想开始使用它,但每当我正在处理的测试用例需要一个尚不存在的类(作为输入或作为输出)时,我都会遇到冲击.

问题是我不知道是否创建没有任何功能的类(是否考虑未经测试的代码?),或者停止测试(当它是绿色时),并开始为这个新的非编写测试 - 现有的课程.

第二种方法似乎是递归的,可能会让我失去思路,而第一种方法创造了一个没有测试的新课程.

有没有第三种方法我没有想到,哪种更好?

Mar*_*ann 6

你可以双向前进.有时,只是创建一个新的辅助类并暂时将其保留为空壳是一种很好的方法.

但是,TDD的主要好处是有关您的代码的反馈,因此,如果您遇到这种情况,您应该停下来考虑一下这会告诉您API的设计.

尽管如此,这没有什么本质上的错误,因为它还取决于你的整体方法.如果你正在进行Outside-In TDD,这往往会发生很多事情,因为你从抽象层面开始并逐渐降低(而且爱人级别的类尚不存在).

另一方面,如果你做自下而上的TDD,这不应该经常发生,因为你从构建块开始,然后从这些构建块组成更高级别的类.

在任何情况下,"递归"方法都是使用Git真正发光的情况的一个例子,因为每次你遇到你需要你正在写的那个之前写另一个测试时,你可以去

git stash
Run Code Online (Sandbox Code Playgroud)

然后编写新测试.当你完成新测试后,你可以去

git stash pop
Run Code Online (Sandbox Code Playgroud)

返回原始测试.您可以递归地执行此操作,这样可以帮助您跟踪您的想法.

  • 罗伯特·C·马丁和肯特·贝克说,设计与您从TDD获得的反馈*一起*.没有人说你不被允许提前思考.提前计划是完全可以的,但是你计划得越远,这些计划应该越灵活.参见Robert C. Martin的书[敏捷原理,模式和实践](http://amzn.to/19W4JHk). (3认同)
  • Robert C. Martin最近发表了[他目前关于这个主题的观点](http://blog.8thlight.com/uncle-bob/2014/03/11/when-to-think.html).基本上,他说你应该在*之前考虑*,*在*之前,甚至在*TDD之后*,这与我自己的经验产生共鸣. (2认同)