expected**와 **actual**이 동일한지 확인한다.expected**와 **actual**이 다른지 확인한다.condition**이 **true**인지 확인한다.condition**이 **false**이면 테스트는 실패한다.condition**이 **false**인지 확인한다.condition**이 **true**이면 테스트는 실패한다.object**가 **null**인지 확인한다.object**가 **null**이 아니면 테스트는 실패한다.object**가 **null**이 아닌지 확인한다.object**가 **null**이면 테스트는 실패한다.expected**와 **actual**이 동일한 객체를 참조하고 있는지 확인한다.== 연산자를 사용하여 두 객체의 참조가 동일한지 확인한다.expected**와 **actual**이 다른 객체를 참조하고 있는지 확인한다.expected 배열과 actual 배열이 동일한지 확인한다.**assertThat**은 Hamcrest 라이브러리에 정의된 메소드로, JUnit에도 포함되어 있다. 이 메소드는 매우 유연한 검증 방식을 제공하며, 코드의 가독성을 향상시키는 데 도움이 된다.
assertThat 메소드는 첫 번째 인자로 검사하고자 하는 대상을 받고, 두 번째 인자로는 그 대상이 충족해야 하는 조건을 나타내는 Matcher 객체를 받는다. Matcher 객체는 Hamcrest 라이브러리에서 제공하는 다양한 static 메소드를 통해 생성할 수 있다.
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.*;
// ...
@Test
public void test() {
List<String> list = Arrays.asList("abc", "def", "ghi");
assertThat(list, hasSize(3)); // 리스트의 크기가 3인지 확인
assertThat(list, hasItem("abc")); // 리스트에 "abc"가 포함되어 있는지 확인
assertThat(list, not(hasItem("xyz"))); // 리스트에 "xyz"가 포함되어 있지 않은지 확인
String str = "abc";
assertThat(str, is("abc")); // str이 "abc"와 동일한지 확인
assertThat(str, not(is("def"))); // str이 "def"와 동일하지 않은지 확인
assertThat(str, startsWith("a")); // str이 "a"로 시작하는지 확인
assertThat(str, endsWith("c")); // str이 "c"로 끝나는지 확인
assertThat(str, containsString("b")); // str이 "b"를 포함하는지 확인
}
<aside>
🔥 **assertEquals**와 **assertThat**은 파라미터의 순서에 대해 약간 다른 관례를 갖고 있다.
assertEquals**의 경우, 첫 번째 파라미터는 "예상되는 값"이고, 두 번째 파라미터는 "실제 값"이다. 즉, assertEquals(expectedValue, actualValue) 형태로 사용한다.assertThat**의 경우, 첫 번째 파라미터는 "실제 값"이고, 두 번째 파라미터는 "매처(Matcher)"이다. 매처는 "예상되는 값" 혹은 "예상되는 조건"을 표현한다. 즉, assertThat(actualValue, matcher) 형태로 사용다.
</aside>