在进行TDD时我应该如何创建类

时间:2012-02-20 07:15:05

标签: java java-ee junit

我已经开始做TDD了,我不确定我是否正确地做了。我做了一个问题课和一个QuestionTest。 Question类有一个addAnswer方法,它接受Answer类的一个实例。现在,我应该只创建类Answer并使用默认构造函数。或者我应该制作Answer类并为构造函数提供参数吗?

question.addAnswer(new Answer("Some", "Argument that I know I will use")); 

或:

question.addAnswer(new Answer()); 

这可能是我写作的最后一个,只是我需要继续进行。

3 个答案:

答案 0 :(得分:1)

我正在阅读的是您正在测试推动Question类的创建,在此期间您决定需要创建Answer类。您希望尽可能少地编写并推迟创建完整的构造函数。

你可以把QuestionTest写成保持并开始编写AnswerTest。测试您可以以所需的方式构造答案(如果答案需要这些参数,请不要创建默认构造函数)。测试构建后你的答案表现如你所愿。如果getter是一个愚蠢的数据类,你可以断言getter返回正确的值。

然后你可以回到测试问题并使用完整的构造函数。

答案 1 :(得分:0)

鲍勃,我发现如果我提前完成所有计划,TDD最适合我。这包括确定需要哪些类,方法和构造函数。

这样,我的所有测试都能正常运行,但它们开箱即用。但是,当我完成代码时,这些测试开始起作用。这有点棘手,但它确实会迫使您真正考虑您的测试,并确保它们实际涵盖您要测试的所有事件。本练习的一部分是确定哪些数据在哪个时间可用,以及应该在哪个时间调用哪个构造函数。

享受TDD的乐趣,没有法律,只有指导方针,并且最好在您的情况下做有意义的事情。只要TDD帮助您更清楚地了解目标并理解应用程序的工作方式,我认为您走在了正确的轨道上。

答案 2 :(得分:0)

我不赞同埃瓦尔德 - “当前的智慧”说未来计划没有。首先编写测试。测试定义了类的行为 - 只要测试通过,实现就“无关紧要”(尽管性能等)。

最初所有测试都会失败。首先让它们通过(你可以任何方式)。然后重构。这个工作流程可以概括为这个咒语:

  1. 红色
  2. 绿色
  3. 重构
  4. 重复直到你很高兴将你的工作提交给代码库。


    关于构造函数,除非你有最终字段,否则非默认构造函数是一种便利,所以不要在测试中使用它们 - 它们可能无法在重构/复查中存活。