TDD - 引入字段的测试

TDD - Tests for introducing fields

我的应用程序中有一些名为 Offer 的实体。它有一些字段,如价格、描述和 3-4 个。由于我目前正在学习 TDD,所以我不想在没有测试要求的情况下介绍这些领域。问题是 title 之类的字段没有任何我可以要求的业务意义,因此测试将是:

  user creates offer with title "xyz"
  assert that offer has title xyz

有没有其他的方式来介绍这种领域。我是否应该为这种情况编写测试?

在 TDD 中,您编写功能测试。在您的情况下,字段本身并不重要。您希望实例保留特定值。对此的测试可能是:

sut.setProperty(value)

assertThat(sut.getProperty(), is(value)

但我不会为此编写测试,因为它没有真正的功能。您应该有其他使用这些属性的测试,并为其覆盖 getter/setter。例外情况是 getter/setter 包含某种逻辑,例如某个值有上限。

这里的核心方面:良好的 OOP 关注 行为 而不是 状态 。换句话说:至少在谈论面向对象的语言时,您不希望 字段暴露在 class.

的外部

相反,您会根据 行为 来思考 - 又名 方法 。从这个意义上说,另一个答案是正确的;您宁愿创建 getter/setters 并验证它们。

这里有一个免责声明:如果可能,避免使用 setter。而是确保您的字段只分配一次(由构造函数)。换句话说:努力编写不可变的 classes.

回到我最初的观点:如何 "field" 是一个内部实现细节。这是您不希望外界知道的事情 - 因此您可以根据需要自由更改实现!