TDD。无论如何先测试?

时间:2009-08-09 04:41:30

标签: unit-testing tdd

你还在先做测试吗?或者在某些情况下,您正在进行一些编码,然后编写测试以确保代码有效?至于我,我更喜欢创建一个类。当然,在课堂创作过程中我会考虑s interface and how to test the class. But I don首先编写测试代码。你先写了吗?你认为你应该先写测试代码吗?

4 个答案:

答案 0 :(得分:6)

我不是这个问题的纯粹主义者(TDD不仅仅涉及编写测试,还涉及最初编写非常小的“硬编码”测试并重构它们 - 请参阅The Book The Master他自己。)

当我正在进行增量开发以向现有模块添加功能时,我倾向于先测试,并且当我正在进行的增量开发是修复错误时,我坚持先测试(在后一种情况下)在修复导致错误的代码之前,我绝对需要一个单元测试和集成测试来重现错误。

当我正在进行“绿地”开发时,我往往更加宽松,特别是如果这是一个探索性的,“让我们看看我们能在这里做什么有用”,自然 - 这确实发生了,例如在数据挖掘等方面 - 你有一个模糊的想法,即数据中可能存在一个有用的信号,一些关于其可能性质的假设以及[可能]提取它的聪明方法 - 测试无济于事探索取得了很大进展。

而且,一旦我开始对我所拥有的东西感到满意,从而开始编写测试,我不一定要从头开始重做“探索性”代码(因为我保持清洁和可用,因为我去了,特别是在Python中,但在R和其他灵活的语言中也不难做到。)

答案 1 :(得分:3)

根据定义,测试驱动开发是首先编写测试。如果您首先创建您的类,您编写的后续测试可以称为单元测试,但它不是TDD。

有许多人说首先编写测试可以提高代码质量。我倾向于同意,只要在软件设计方面付出一些努力,而不仅仅是编写测试并使它们通过。

如果要重构现有的遗留系统,最好在重构之前将该系统的功能包装在一组测试中。这样,你知道你的代码是否会发生变化。

答案 2 :(得分:0)

在我看来,测试驱动开发不仅仅是编写单元测试。首先测试TDD更多的是让自己置身于思考你要用你将要编写的代码实现的目标的思维方式。

  • 您的验收标准应该是什么?
  • 您的代码何时“完成”以及如何定义?

在代码之前编写单元测试只是形式化这种验收标准的方法之一。我认为测试第一个TDD的最大好处是你给出了一个很好的思考和文档(在单元测试中,在纸上,在白板上)验收标准对于这个特征/故事是什么你正在实施。拥有此类文档还有助于确定已完成的范围。

因此,无论您是先编写函数还是为其编写单元测试,或者您决定先编写测试,然后编写该函数的次要性质。一旦您考虑并记录了您的验收标准,您的好处就是您的目标更清晰,您更有可能专注于实现最小化任何“噪音”的验收标准(例如,功能x将很好添加,上午我已经“完成了”。

当然,这并不意味着我们继续编写代码而不进行测试,并尝试在我们已编码4个类时改进单元测试!我只是认为在实际代码之前编写单元测试不需要100%教条,因为TDD的好处在于其他地方,但无论如何我们的单元测试应该跟上我们不断增长的代码库。

答案 3 :(得分:-1)

让我们在这里清楚,TDD是为生产代码而设计的。如果你想遵循生产代码的TDD规则,那么你写的第一件事就是你的第一次测试。

我编写了我的第一个测试(在编写一行生产代码之前),它可能想要实例化一个新类并运行它会产生某种错误,我通过编写最少量的生产代码来修复测试运行

如果您想做其他事情,那么您可以制定自己的规则:您可以编写任何您喜欢的代码和/或测试来探索任何设计或模式或任何内容。

但是,如果您想根据从实验中学到的内容编写生产代码,那么您可能会更好 - 但从技术上讲,您应该放弃实验 - 写下您的实验第一次测试。