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" 是一个内部实现细节。这是您不希望外界知道的事情 - 因此您可以根据需要自由更改实现!
我的应用程序中有一些名为 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" 是一个内部实现细节。这是您不希望外界知道的事情 - 因此您可以根据需要自由更改实现!