평소 테스트 코드르를 작성할 때 assertj 의 assertThat 을 주로 애용했는데 이번에 SoftAssertions 에 대해 알게되어 각각의 특징에 대해 알아보았다.
또 assertAll 과 AssertSoftly 의 차이점도 알아봤다.
@Test
void no1() {
String nickname = "name";
int age = 10;
Member member = createMember(nickname, age);
assertThat(member.getNickname()).isEqualTo(nickname);
assertThat(member.getAge()).isEqualTo(age);
}
hasFieldOrPropertyWithValue
를 사용해 개선할 수 있다.@Test
void no1() {
String nickname = "name";
int age = 10;
Member member = createMember(nickname, age);
assertThat(member)
.hasFieldOrPropertyWithValue("nickname", "nickname")
.hasFieldOrPropertyWithValue("age", 30);
}
@Test
void no1() {
String nickname = "name";
int age = 10;
boolean useAgreement = true;
Member member = createMember(nickname, age, useAgreement);
assertThat(member)
.hasFieldOrPropertyWithValue("nickname", "nickname")
.hasFieldOrPropertyWithValue("age", 30)
.hasFieldOrPropertyWithValue("useAgreement", false);
}
java.lang.AssertionError:
Expecting
to have a property or a field named "nickname" with value
"nickname"
but value was:
"name"
(static and synthetic fields are ignored)
@Test
void no1() {
String nickname = "name";
int age = 10;
boolean useAgreement = true;
Member member = createMember(nickname, age, useAgreement);
assertSoftly(softly -> {
softly.assertThat(member.getNickname()).isEqualTo(nickname);
softly.assertThat(member.getAge()).isEqualTo(age);
softly.assertThat(member.getUseAgreement()).isEqualTo(useAgreement);
});
}
@Test
void no1() {
String nickname = "name";
int age = 10;
boolean useAgreement = true;
Member member = createMember(nickname, age, useAgreement);
assertSoftly(softly -> {
softly.assertThat(member.getNickname()).isEqualTo("nickname");
softly.assertThat(member.getAge()).isEqualTo(age);
softly.assertThat(member.getUseAgreement()).isEqualTo(false);
});
}
org.assertj.core.error.AssertJMultipleFailuresError:
Multiple Failures (2 failures)
-- failure 1 --
expected: "nickname"
but was: "name"
at ... .java:20)
-- failure 2 --
expected: false
but was: true
at ... .java:22)
hasFieldOrPropertyWithValue
를 사용해도 잘 작동된다@Test
void no1() {
String nickname = "name";
int age = 10;
boolean useAgreement = true;
Member member = createMember(nickname, age, useAgreement);
assertSoftly(softly -> {
softly.assertThat(member)
.hasFieldOrPropertyWithValue("nickname", "nickname")
.hasFieldOrPropertyWithValue("age", age)
.hasFieldOrPropertyWithValue("useAgreement", false);
});
}
org.assertj.core.error.AssertJMultipleFailuresError:
Multiple Failures (2 failures)
-- failure 1 --
Expecting
to have a property or a field named "nickname" with value
"nickname"
but value was:
"name"
(static and synthetic fields are ignored)
at ... .java:21)
-- failure 2 --
Expecting
to have a property or a field named "useAgreement" with value
false
but value was:
true
(static and synthetic fields are ignored)
at ... .java:23)
assertThat
을 사용AssertSoftly
를 사용hasFieldOrPropertyWithValue
를 사용