我正在尝试关注TDD并且对它有点新意。我有一个要实现的接口(Java)。
所以我开始编写接口行为的测试用例,使它们失败并通过添加或修改代码来修复它们。
但是,正如我看到主类的大小正在增长,我将主类分解为单独的类。但对于某些子类,我意识到最好单独测试它们并在主类测试用例中模拟它们。
但是当我这样做时,我不得不再次重写主类测试用例(对于移动的代码),导致大量的流失和重复工作。
我是否在实施TDD方法方面做错了什么?
答案 0 :(得分:3)
听起来你正确地做对了。但是,有几点要做。重申以确保我们在同一页上:
从主类A中提取辅助类B,
一些建议:
在解压缩助手类之后,您可以删除测试帮助程序类功能的主类的所有测试(或可能是几个)。因此,您不应该对需要重写的主类进行多次测试。
例如,如果主类为一个人建模并且辅助类根据其给定的名称,姓氏,标题等构造该人的全名,则主类最初将对该功能进行多次测试:给定名称与多个,标题与无标题等。您将为助手类编写等效测试,然后删除除了一个与全名构造有关的主类测试之外的所有测试。你需要在主类中留下一个测试,它测试它知道如何构造某种全名;如果您错误地删除了对助手类的调用或类似的话,该测试将失败。
如果帮助程序类很简单(特别是,如果它没有需要特殊测试设置的重度依赖项或导致它很慢),则不必模拟它。这可能会为你节省一些主类测试的重写。
此过程确实需要重新测试测试和代码。 通过提前思考并尽快进行重构来最大限度地减少返工,一旦你说服自己会有所帮助。我发现当我认为我需要提取课程时我通常是对的;我很少在以后上课。因此,积极地提取类通常不会导致额外的工作,而是通过更快地获得正确的对象模型来最小化它。