POJO是否有必要按照TDD进行测试覆盖?

Is it necessary to cover POJO by tests according to TDD?

我目前正在阅读 Uncle Bob 的书,试图在我的职业生涯中拥抱 TDD。目前我在怀疑是否有必要编写这样的测试:

public class Person {
    private String firstName;
    private String middleName;
    private String lastName;

    /*getters and setters*/
}

@Test
public void testPersonCreation() {
    Person person = new Person();

    person.setFirstName("Robert");
    person.setMiddleName("Cecil");
    person.setLastName("Martin");

    Assertions.assertThat(person.getFirstName()).isEqualTo("Robert");
    Assertions.assertThat(person.getMiddleName()).isEqualTo("Cecil");
    Assertions.assertThat(person.getLastName()).isEqualTo("Martin");
}

这种方法的优缺点是什么?

如果您使用自动生成的 getters 和 setters 框架,如 Lombok,您将不需要对其进行测试

@Getter
@Setter
public class Person {

首先,在编写测试时使用代码覆盖工具来验证覆盖的内容。

当您为使用 pojo 的代码编写测试时,也应该涵盖 pojo getter 和 setter。这比仅使用 pojos 的测试更有价值,因为它表明 pojos 在应用程序代码的上下文中起作用。

如果我向 pojo 添加除 getter 和 setter 之外的方法,我会为它们添加测试。但是我尽量避免对 getter 和 setter 进行测试。

有用于此的测试框架(参见 this question)也可用于检查 equals 和 hashcode。

Is it necessary to cover POJO by tests according to TDD?

Test Driven Development by Example 中,Kent Beck 写道,TDD 由两个规则定义

  • 除非你有一个失败的自动化测试,否则不要写一行新代码。
  • 消除重复。

如果您认为 Kent Beck 于 2002 年左右撰写的文章具有权威性,那么是的 - 在您编写新 POJO 的一行之前,您必须编写一个自动化测试。

2008 年,an expert wrote

I get paid for code that works, not for tests, so my philosophy is to test as little as possible to reach a given level of confidence

我的解释是,如果您不是从自动化测试开始的,那么它就不是 TDD -- 但 TDD 并不是适用于所有情况的工具。

课程用马。