AssertJ에 대하여

2020. 8. 12. 16:39Spring Boot

이 포스트에서는 AssertJ에 대해 간단한 설명과 예시를 들어 설명한다. 더 자세한 내용을 알고 싶다면 AssertJ 공식문서를 보자.

 

AssertJ / Fluent assertions for java

AssertJ has many great features that not everybody is aware of, here are some of them. Basic tips : Iterable and arrays assertions : Advanced tips : We want to start typing asser and let code completion suggest assertThat from AssertJ (and not the one from

joel-costigliola.github.io

AssertJ 란?

AssertJ는 유연한 테스트 인터페이스를 제공해주는 자바 라이브러리이다. 테스트코드 작성에 있어서 높은 가독성과 쉬운 유지보수성를 지향한다.

 

AssertJ is a java library providing a rich set of assertions, truly helpful error messages, improves test code readability and is designed to be super easy to use within your favorite IDE

 

공식 문서의 simple example을 보면 실제로 테스트에 있어 아주 직관적인 코드를 짤 수 있게 해주는 것을 확인할 수 있다.

 

assertThat, Assertion

예제를 한번 살펴보자.

@Test 
void a_few_simple_assertions() { 
		assertThat("The Lord of the Rings").isNotNull() 
		.startsWith("The") 
		.contains("Lord") 
		.endsWith("Rings");
}

설명이 필요없을 정도로 읽기만 해도 어떤 테스트인지 바로 이해가 될 정도로 직관성이 뛰어나다.

 

왼쪽에서 오른쪽으로 읽으면 자연스럽게 “The Lord of the Rings”에 대해서 not null이고 The로 시작하며 Lord를 포함하고 Rings로 끝나는지 검증하는 구문임을 알 수 있다.

 

예제 분석

assertThat 메소드 인자의 값(“The Lord of the Rings”) 을 증명하는 구문인데 여기서 Assertion(주장 내용)은 isNotNull, 즉 null 이 아니라는 것이다.

 

Assertion이란 주장하는 바 이다. 즉 테스트가 필요한 객체나 변수를 assertThat에 넣었다면, Assertion에는 테스트하는 인자들에게 기대되어지는(expecting) 값들이 들어간다. isNotNull 처럼 is로 시작하는 메소드들이 이에 해당한다. 책의 예제에서는 isEqualTo 메소드가 많이 보이는데 이 또한 Assertion의 부분이다.

 

assertj는 보통 assertThat과 이러한 Assertion 두개가 짝을 이루어 검증하는 과정을 거친다. 추가적으로 예문처럼 이 Assertion 뒤에 여러 조건을 걸어줄 수도 있다. 여기서는 “The”로 시작하고 “Lord”가 들어가며 “Rings”로 끝나는 조건이 추가됐다.

 

Assertion Description

Assertion에 대한 상황을 설명하는 것이 중요할 때도 있다. 이럴 때는 as 메소드를 통해 실패했을 경우 출력되는 로그에 상황을 설명한다.

 

이때 주의할 점은 as메소드는 반드시 Assertion 이전에 와야 한다는 것이다.

 

TolkienCharacter frodo = new TolkienCharacter("Frodo", 33, Race.HOBBIT);

// 실패하는 테스트 예시. 그리고 중요한 것은 as()를 assertion이전에 호출해야 한다!
assertThat(frodo.getAge()).as("check %s's age", frodo.getName()).isEqualTo(100);

 

에러메세지는 다음과 같다.

[check Frodo's age] expected:<100> but was:<33>

이렇게 간단하게 assertJ에 대한 설명을 마쳤다. 다음 포스트에서는 스프링부트에서의 JPA 사용과 테스트 코드 방법에 대해 설명해보겠다.