이번에는 각 자료형 별로 사용할 수 있는 Assertion들을 소개한다.

Object Assertions

Object(객체)의 동등성을 확인해야되는 경우가 있다 하지만 아래의 코드는 객체의 레퍼런스를 비교하므로 동등성을 비교할 수 없다.

Dog fido = new Dog("Fido", 5.25);
Dog fidosClone = new Dog("Fido", 5.25);

assertThat(fido).isEqualTo(fidosClone);

isEqualTo대신 isEqualToComparingFieldByFieldRecursively()를 사용하여 동등성을 비교할 수 있다.

assertThat(fido).isEqualToComparingFieldByFieldRecursively(fidosClone);

Boolean Assertions

boolean을 확인하는 것에는 isTrue()isFalse()가 있다.

예시

assertThat("".isEmpty()).isTrue();

Iterable/Array Assertions

Iterable이나 Array를 확인하는 하는 방법에는 여러가지가 있다. 아래 예시를 참고한다.

List<String> list = Arrays.asList("1", "2", "3");

assertThat(list).contains("1"); // "1"을 포함하고 있는지 확인
assertThat(list).isNotEmpty(); // 비어있지 않는지 확인
assertThat(list).startsWith("1"); // "1"로 시작하는 배열인지 확인

아래와 같이 여러 개의 Assertion을 구성할 수도 있다.

assertThat(list)
  .isNotEmpty() // 비어있지 않고
  .contains("1") // 1을 포함하고
  .doesNotContainNull() // null을 포함하지 않고
  .containsSequence("2", "3"); // "2", "3" 순서대로 요소를 포함하고 있는 부분이 있는지 확인

Character Assertions

character는 다음의 예시를 통해 확인한다.

assertThat(someCharacter)
  .isNotEqualTo('a') // 'a'가 아닌지
  .inUnicode() // 유니코드 테이블에 포함되어 있는지
  .isGreaterThanOrEqualTo('b') // 'b'보다 큰지
  .isLowerCase(); // 소문자인지 확인

Class Assertions

class는 현재 클래스가 인터페이스인지 확인이 가능하다.

assertThat(Runnable.class).isInterface();

또한 class간의 상속 관계를 확인할 수 있다.

class Jedi {}
class HumanJedi extends Jedi {}
 
// this assertion succeeds:
assertThat(Jedi.class).isAssignableFrom(HumanJedi.class);
 
// this assertion fails:
assertThat(HumanJedi.class).isAssignableFrom(Jedi.class);

File Assertions

file은 아래의 예시를 통해 확인한다.

assertThat(someFile)
  .exists() // 파일이 존재하는지
  .isFile() // 디렉토리가 아닌 파일인지
  .canRead() // 읽기 권한이 있는지
  .canWrite(); // 쓰기 권한이 있는지 확인

InputStream Assertions

hasSameContentAs()를 이용하여, 입력에대한 확인을 할 수 있다.

assertThat(given).hasSameContentAs(expected);

Map Assertions

map은 아래의 예시를 통해 확인한다.

assertThat(map)
  .isNotEmpty() // 비어있지않은지
  .containsKey(2) // 키 2를 포함하고 있는지
  .doesNotContainKeys(10) // 키 10을 포함하지 않는지
  .contains(entry(2, "a")); // 키 2에 "a"의 값을 가지는지 확인

관련 사이트

https://www.baeldung.com/introduction-to-assertj

댓글남기기