2

我有一个包含三个字段的 Java 类。我意识到由于需求的变化,我只需要其中两个。

理想情况下,我会在修改代码之前编写一个失败的测试用例。

有没有标准的方法,或者我应该忽略这个任务的 TDD?

4

5 回答 5

3

这就是重构,所以你不需要从失败的测试开始。

  1. 使用该字段查找所有方法。
  2. 确保它们被单元测试覆盖。
  3. 重构方法,使它们不再使用该字段。
  4. 删除字段。
  5. 确保测试正在运行。
于 2013-03-26T09:43:26.880 回答
3

该字段的删除是否会改变类的行为?如果没有,只需删除该字段并检查该类是否仍然正常工作(也就是通过您应该已经编写的测试)。
TDD 原则是编写“由测试设计”的代码。这可能听起来很傻,但意味着您应该编写的第一个类是测试类,测试被测类的行为。您应该迭代几个步骤:

  1. 写测试。它不应该编译(你没有被测试的类/类)
  2. 使测试编译。它应该失败(你只有一个不满足测试断言的空类)
  3. 使测试以最简单的方式通过(通常,只是使您正在测试的方法返回预期值)
  4. 细化/重构/泛化被测类,重新运行测试(它应该仍然通过)。这一步应该很快,通常不到 2 分钟。
  5. 从第 2 步开始重复,直到所需的行为几乎自然地出现。
于 2013-03-26T09:40:32.090 回答
1

如果您有所需的所有字段的详尽列表,则可以通过反射比较该字段列表:

yourClassName.getClass().getDeclaredFields() vs your list of fields
于 2013-03-26T09:39:08.077 回答
1

为没有要删除的字段的构造函数编写测试。

显然,只有在构造函数将字段的值作为参数时才有效。

于 2013-03-26T10:11:02.710 回答
1
  • 删除涵盖已删除功能的所有测试(根据 TDD 的 3 条规则,这不算作“编写生产代码”)。

  • 删除剩余测试中对过时字段的所有引用。如果其中任何一个失败,则允许您编写所需的生产代码以使其通过。

  • 一旦您的测试再次变为绿色,所有后续修改都属于“重构”类别。您可以在此处删除您的(现在未使用的)字段。

于 2013-03-26T15:41:52.357 回答