[AssertJ] Assertions(assertThatThrownBy 추가 필요)
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");
- 비어있는가
assertThat(list).isNotEmpty();
- 주어진 요소로 시작하는가
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
Author And Source
이 문제에 관하여([AssertJ] Assertions(assertThatThrownBy 추가 필요)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@kdkeiie8/AssertJ-Assertions저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)