我已经开始做TDD了,我不确定我是否正确地做了。我做了一个问题课和一个QuestionTest。 Question类有一个addAnswer方法,它接受Answer类的一个实例。现在,我应该只创建类Answer并使用默认构造函数。或者我应该制作Answer类并为构造函数提供参数吗?
question.addAnswer(new Answer("Some", "Argument that I know I will use"));
或:
question.addAnswer(new Answer());
这可能是我写作的最后一个,只是我需要继续进行。
答案 0 :(得分:1)
我正在阅读的是您正在测试推动Question类的创建,在此期间您决定需要创建Answer类。您希望尽可能少地编写并推迟创建完整的构造函数。
你可以把QuestionTest写成保持并开始编写AnswerTest。测试您可以以所需的方式构造答案(如果答案需要这些参数,请不要创建默认构造函数)。测试构建后你的答案表现如你所愿。如果getter是一个愚蠢的数据类,你可以断言getter返回正确的值。
然后你可以回到测试问题并使用完整的构造函数。
答案 1 :(得分:0)
这样,我的所有测试都能正常运行,但它们开箱即用。但是,当我完成代码时,这些测试开始起作用。这有点棘手,但它确实会迫使您真正考虑您的测试,并确保它们实际涵盖您要测试的所有事件。本练习的一部分是确定哪些数据在哪个时间可用,以及应该在哪个时间调用哪个构造函数。
享受TDD的乐趣,没有法律,只有指导方针,并且最好在您的情况下做有意义的事情。只要TDD帮助您更清楚地了解目标并理解应用程序的工作方式,我认为您走在了正确的轨道上。
答案 2 :(得分:0)
我不赞同埃瓦尔德 - “当前的智慧”说未来计划没有。首先编写测试。测试定义了类的行为 - 只要测试通过,实现就“无关紧要”(尽管性能等)。
最初所有测试都会失败。首先让它们通过(你可以任何方式)。然后重构。这个工作流程可以概括为这个咒语:
重复直到你很高兴将你的工作提交给代码库。
关于构造函数,除非你有最终字段,否则非默认构造函数是一种便利,所以不要在测试中使用它们 - 它们可能无法在重构/复查中存活。