티스토리 뷰
스터디에서 대니스가 말씀해주시길, JUnit 내에 있는 Assertions보다는 AssertJ를 많이 사용한다고 말씀해주셨다.
그래서 이번엔 이 두 개의 차이점을 정리해보려고 한다.
해당 내용은 다음 링크를 번역한 내용이다.
우선, 간단하게 두 개의 차이점은 다음과 같다.
- JUnit : 자바에 구축된 자동화 테스트가 가능한 프레임워크
- AssertJ : 자바 테스트에서 유창하고 풍부한 assertions를 작성하는데 사용되는 오픈소스 라이브러리
물론, JUnit에서도 assertions가 가능하지만, AssertJ는 작업 과정을 더 효과적으로 만들고 코드를 더 잘 읽을 수 있게 만든다.
왜 AssertJ일까?
- 배우기 쉽다.
- AssertJ Docs 정리가 잘 되어 있다. ⇒ 링크는 아래 참고
- 사용하기 쉽다.
- 테스트 클래스에 dependency 및 static import만 추가하면 돼서 쓰기 간편하다.
- fluent
- 유창하다라는 뜻인데, 맞지 않는 것 같아서 그대로 가져왔다.
- AssertJ는 여러분의 assertions를 다양화하는 데 도움을 준다.
- 코드를 더 읽기 쉽다.
- 자동 완성을 지원한다.
- 따라서 모든 메서드 이름을 기억할 필요는 없다.
gradle dependency에 다음 코드를 추가하면 된다.
testImplementation 'org.assertj:assertj-core:3.13.2'
그 다음 테스트 코드에 static import를 통해 가져와서 사용하면 된다.
import static org.assertj.core.api.Assertions.*;
차이점을 코드로 알아보자.
다음은 JUnit5를 사용한 코드이다.
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
public class JUnitTest {
@Test
public void testEqual() {
Object object1 = new Object();
Object object2 = object1;
Assertions.assertEquals(object1,object2);
}
}
다음은 AssertJ를 사용한 코드이다.
import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.*;
public class AssertJTest {
@Test
public void testEqual() {
Object object1 = new Object();
Object object2 = object1;
assertThat(object1).isEqualTo(object2);
}
}
확실히 JUnit보다는 AssertJ가 더 직관적이다.
심지어 AssertJ는 as 메서드를 통해 에러 메시지까지 정의가 가능하다.
import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.*;
public class AssertJTest {
@Test
public void testEqual() {
Object object1 = new Object();
Object object2 = object1;
Object object3 = new Object();
// failing assertion, with custom error message
assertThat(object1).as("Checking whether objects are the same").isEqualTo(object3);
}
}
Collection Test
Student라는 Class를 타입으로 가지는 Collection을 테스트하는 코드를 JUnit, AssertJ 둘다 살펴보자.
class Student {
private String name;
private int age;
private int level;
public Student(String name, int age) {
this.name = name;
this.age = age;
}
}
JUnit
Junit에서는 stream과 lambda를 사용하여 해결하였다.
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
public class StudentTest {
@Test
public void testStudentArrayList() {
ArrayList<Student> characters = new ArrayList<>();
Student frodo = new Student("Frodo", 32);
Student aragorn = new Student("Aragorn", 62);
Student sam = new Student("Sam", 36);
characters.add(frodo);
characters.add(aragorn);
characters.add(sam);
List<Student> expected = new ArrayList<>();
expected.add(frodo);
expected.add(aragorn);
List<Student> filteredList = characters.stream()
.filter((character) -> character.name.contains("o"))
.collect(Collectors.toList());
Assertions.assertEquals(expected,filteredList);
}
}
조금은 복잡한 테스트 코드가 됐다.
AssertJ
다음은 AssertJ를 사용한 테스트 코드를 살펴보자.
import org.junit.jupiter.api.Test;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import static org.assertj.core.api.Assertions.assertThat;
public class StudentTest {
@Test
public void testStudentArrayList() {
ArrayList<Student> characters = new ArrayList<>();
Student frodo = new Student("Frodo", 32);
Student aragorn = new Student("Aragorn", 62);
Student sam = new Student("Sam", 36);
characters.add(frodo);
characters.add(aragorn);
characters.add(sam);
assertThat(characters)
.filteredOn(character -> character.name.contains("o"))
.containsOnly(aragorn, frodo);
}
}
결론
AssertJ를 장려하자!
참고로, 위 글은 조금 옛날 글이라 JUnit5에 대해서 좀더 공부해보고 추가 블로깅하려고 한다.
AssertJ Docs
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 객체지향
- Kotlin
- JPA
- 이펙티브 자바
- Olympiad
- 이팩티브 자바
- node.js
- BOJ
- C++
- AWS
- 코테
- MSA
- 테라폼
- Java
- Algorithm
- 정규표현식
- BAEKJOON
- Spring
- Effective Java
- 디자인 패턴
- 프로그래머스
- 백준
- Spring Boot
- 디자인패턴
- kkoon9
- 클린 코드
- 알고리즘
- kotest
- 클린 아키텍처
- programmers
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함