Class TDD我应该创建测试用例所需的空类吗?

Class TDD我应该创建测试用例所需的空类吗?,class,unit-testing,testing,tdd,methodology,Class,Unit Testing,Testing,Tdd,Methodology,我是TDD新手,很想开始使用它,但每当我正在处理的测试用例需要一个尚不存在的类(作为输入或输出)时,我总是遇到麻烦 问题是,我不知道是创建没有任何功能的类(这被认为是未测试的代码吗?),还是停止测试(当它是绿色的时候),并开始为这个新的不存在的类编写测试 第二种方法似乎是递归的,可能会导致我失去思路,而第一种方法创建了一个没有测试的新类 还有第三种方法我没有想到,哪一种更好?你可以双向选择。有时候,仅仅创建一个新的辅助类并暂时将其作为一个空壳是一个好方法 但是,TDD的主要好处是关于您的代码“强

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

问题是,我不知道是创建没有任何功能的类(这被认为是未测试的代码吗?),还是停止测试(当它是绿色的时候),并开始为这个新的不存在的类编写测试

第二种方法似乎是递归的,可能会导致我失去思路,而第一种方法创建了一个没有测试的新类


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

你可以双向选择。有时候,仅仅创建一个新的辅助类并暂时将其作为一个空壳是一个好方法

<>但是,TDD的主要好处是关于您的代码“强>反馈< /强>,所以如果这发生在您身上,您应该停下来考虑一下这会告诉您关于API的设计。

尽管如此,这并没有本质上的错误,因为这也取决于你的整体方法。如果你这样做的话,这种情况往往会发生很多,因为你从抽象的层次开始,一直到抽象的层次(而情人层次的类还不存在)

另一方面,如果您使用自底向上的TDD,这种情况不应该经常发生,因为您从构建块开始,然后从这些构建块组成更高级别的类

在任何情况下,“递归”方法都是一个例子,在这种情况下,使用确实很有用,因为每当您遇到需要在当前编写的测试之前编写另一个测试时,您都可以继续

git stash
git stash pop
然后编写新的测试。当你完成了新的测试后,你就可以去了

git stash
git stash pop

返回原始测试。您可以递归地执行此操作,因此它有助于跟踪您的想法。

在咨询了几位同事之后,我想到了答案


当测试类A并发现中间测试需要一个不存在的类B时,我将创建B作为接口而不是类。这将解决问题(即接口无法/不需要测试),并有助于更好地分离和抽象。

感谢您的回复。我的问题是,我试图做“纯”TDD,即没有设计阶段。这似乎是一个真正的问题,因为它阻止我选择任何一个方向(自上而下、自下而上)。我好像错过了什么。如果我事先不应该做任何设计,我怎么知道从哪里开始(先写哪个测试)呢?为什么你认为你不能先做设计?你当然可以也应该这样做。好吧,我的假设是基于我听过和读过的罗伯特·C·马丁和肯特·贝克的很多东西,他们主张设计应该从TDD过程中产生(因为没有更好的词),并且需要将编写第一行测试代码之前的时间减到最少(即很少或没有设计时间)。我读过他们的一些书(干净的代码,通过示例进行测试驱动的开发,等等),听了他们在youtube上的很多演讲,他们似乎对这种方法非常一致。Robert C.Martin和Kent Beck说,设计是与您从TDD获得的反馈一起进行的。他们中没有人说不允许你提前思考。提前计划是很好的,但是你计划得越早,这些计划就应该越灵活。参见罗伯特·C·马丁的书。罗伯特·C·马丁最近出版。基本上,他说你应该在TDD之前、期间甚至之后思考,这与我自己的经验有很好的共鸣。