【发布时间】:2021-01-08 19:24:09
【问题描述】:
在我的团队中,这是一个使用 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);
}
我认为我的方式更直接且类型安全。第一种方法有什么优点吗?
【问题讨论】:
-
这是个人选择的问题。在这两种情况下,类型安全都不是问题。
-
这不是Java中的问题,但没关系,你会发现it很有用。
-
@Turing85 为什么类型安全不是问题?在第一种情况下,作为
containsExactly的参数,我可以传递String、String 而不是String、Integer。而且我只在运行时得到错误。使用第二种方法,我在编译时得到它 -
@a3dsfcv 你得到的错误是一个断言错误,因为类型不匹配。这是我在测试框架中所期望的,并且符合
equals(...)的一般工作方式。从快速失败的角度来看,您是对的。 -
输出怎么样?测试失败时,两种样式的错误消息是否相同?