Java 什么';与连续断言相比,断言流畅的优点是什么?

Java 什么';与连续断言相比,断言流畅的优点是什么?,java,testing,assertj,Java,Testing,Assertj,在我的团队中,有一个线程可以通过以下方式使用AssertJ编写流畅的断言: void checkPerson(Person person, String expectedName, Integer expectedAge) { assertThat(person) .isNotNull() .extracting(Person::getName, Person::getAge) .containsExactly(expectedName, expectedAge)

在我的团队中,有一个线程可以通过以下方式使用AssertJ编写流畅的断言:

void checkPerson(Person person, String expectedName, Integer expectedAge) {
  assertThat(person)
    .isNotNull()
    .extracting(Person::getName, Person::getAge) 
    .containsExactly(expectedName, expectedAge)
}
但我更喜欢另一种方式:

void checkPerson(Person person, String expectedName, Integer expectedAge) {
  assertThat(person).isNotNull();
  assertThat(person.getName()).isEqualTo(expectedName);
  assertThat(person.getAge()).isEqualTo(expectedAge);
}

我认为我的方式更直接,类型更安全。第一种方法有什么优点吗?

对我来说,主要的好处是可读性——流畅的代码(至少对我来说)更容易阅读,占用的空间更少。与在实例生成器类中调用fluent方法的原因完全相同。

这是个人选择的问题。类型安全在这两种情况下都不是问题。这在Java中不是问题,但没关系,您会发现它很有用。@Turing85为什么类型安全不是问题?在第一种情况下,作为containsExactly的参数,我可以传递String,String而不是String,Integer。我只在运行时得到错误。第二种方法是编译-time@a3dsfcv您得到的错误是断言错误,因为类型不匹配。这是我在测试框架中所期望的,并且与
equals(…)
通常的工作方式一致。从快速失败的角度来看,你是对的。那么输出呢?当测试失败时,两种样式之间的错误消息是否等效?