[AssertJ] Assertions(assertThatThrownBy 추가 필요)

3971 단어 JavaJava

AssertJ는 Java 테스트에서 사용되는 라이브러리이다.

Writing Assertions

assrtions을 쓰기 위해서, 객체를 Assertions.assertThat()에 넘겨줘야 한다.
다른 라이브러리들과 달리, 아래 코드는 실제로 아무것도 assert하지 않고 절대 테스트에 실패하지 않는다.

// 추가 시 'Assertions.' 생략 가능
import static org.assertj.core.api.Assertions.*;

assertThat(ansyReferenceOrValue);

Object Assertions

객체는 다양한 방법으로 비교될 수 있다.
여기서는 두 객체가 동일한지 판단하는 두 가지 방법을 살펴본다.
1. isEqualTo

public class Dog {
	private String name;
    private Float weight;
    
    // standard getters and setters
}

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

assertThat(fido).isEqualTo(fidosClone);

isEqualTo()는 객체의 레퍼런스를 비교하기 때문에 fail.
만약 객체의 컨텐트를 비교하고 싶은 경우에는 isEqualToComparingFieldByFieldRecursively()를 사용하면 된다.
2. isEqulaToComparingFieldByFieldRecursively()

assertThat(fido).isEqualToComparingFieldByFieldRecursively(fidosClone);

Boolean Assertions

참/거짓을 판단할 수 있다.

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

Iterable/Array Assertions

Iterable이나 Array에 대한 assert 방법
1. 주어진 요소를 포함하는가

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

assertThat(list).contains("1");
  1. 비어있는가
assertThat(list).isNotEmpty();
  1. 주어진 요소로 시작하는가
assertThat(list).startsWith("1");

한 객체에 대해 여러 assertion을 쉽게 결합할 수 있다.

assertThat(list)
  .isNotEmpty()
  .contains("1")
  .doesNotContainNull()
  .containsSequence("2", "3");

Character Assertions

문자를 비교하거나 문자가 유니코드인지 확인할 수 있다.

assertThat(someCharacter)
  .isNotEqualTo('a')			// a가 아닌지
  .inUnicode()					// 유니코드인지
  .isGreaterThanOrEqualTo('b')	// 'b'보다 크고
  .isLowerCase();				// 소문자인지

Class Assertions

클래스 assertion은 대부분 필드, 클래스 유형, 어노테이션 및 클래스 finality 확인에 대한 것이다.

// Runnalbe 클래스가 인터페이스인지 확인
assertThat(Runnable.class).isInterface();

// 한 클래스가 다른 클래스에 할당 가능한지
assertThat(Exception.class).isAssignableFrom(NoSuchElementException.class);

이외에도 파일, 숫자, 인풋 스트림, Throwable 등에 대해서도 가능하다.

AssertThatThrownBy

https://assertj.github.io/doc/#assertj-core-exception-assertions-assertThatThrownBy

Describing Assertions

as를 사용하면 assertion을 커스텀할 수 있다.

  • as(String description, Object... args)
assertThat(person.getAge())
	.as("%s's age should be equal to 100", person.getName())
    .isEqualTo(100);

위 처럼 정의하면 아래와 같은 테스트 결과가 나온다.
[nakkim's age should be equal to 100] expected:<100> but was: <34>

Java 8

AssertJ에서 Java 8의 함수형 프로그래밍 기능을 이용할 수 있다.

// Java 7
assertThat(fellowshipOfTheRing)
  .filteredOn("race", HOBBIT)
  .containsOnly(sam, frodo, pippin, merry);

// Java 8
assertThat(fellowshipOfTheRing)
  .filteredOn(character -> character.getRace().equals(HOBBIT))
  .containsOnly(sam, frodo, pippin, merry);

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

좋은 웹페이지 즐겨찾기