JUnit & AssertJ (추가 예정)
JUnit
JUnit이란 자바용 단위 테스트(유닛 테스트) 프레임워크이다. 여기서 단위 테스트란 애플리케이션 코드 블록(일반적으로 함수 또는 메서드)가 개발자의 이론적 논리에 따라 예상대로 실행되는지 확인하는 코드 블록이다. JUnit을 사용하면 System.out.println()을 사용하여 콘솔로 확인하지 않아도 메소드가 의도대로 실행되는지 테스트할 수 있다.
JUnit Annotation
Annotation | Description |
---|---|
@Test | 해당 메소드가 테스트 메소드임을 나타낸다. |
@DisplayName | 테스트 클래스 혹은 테스트 메소드의 사용자 정의 이름을 선언한다. |
@Disabled | 해당 메소드를 비활성화한다. |
@Timeout | 실행이 지정된 시간을 초과하는 경우, 실패시키는데 사용한다. |
@BeforeEach | 테스트 메소드의 실행 직전에 실행되는 메소드를 의미한다. |
@AfterEach | 테스트 메소드의 실행 직후에 실행되는 메소드를 의미한다 |
@BeforeAll | 해당 테스트 클래스의 첫 번째로 실행되는 메소드다. 해당 메소드는 static으로 선언해야 한다. |
@AfterAll | 해당 테스트 클래스의 마지막으로 실행되는 메소드다. 해당 메소드는 static으로 선언해야 한다. |
JUnit Annotation 예제 코드
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
public class JunitTest {
@BeforeAll
static void testBeforeAll() {
System.out.println("BeforeAll\n");
}
@Test
void testTest1() {
System.out.println("Test1");
}
@Test
void testTest2() {
System.out.println("Test2");
}
@AfterAll
static void testAfterAll() {
System.out.println("AfterAll");
}
@BeforeEach
void testBeforeEach() {
System.out.println("BeforeEach");
}
@AfterEach
void testAfterEach() {
System.out.println("AfterEach\n");
}
}
JUnit Annotation 예제 코드 실행 결과
JUnit 메소드
Method | Description |
---|---|
assertArrayEquals(a, b) | 배열 a와 배열 b의 원소가 일치하는지 확인한다. |
assertEquals(a,b) | a, b의 값이 일치하는지 확인한다. |
assertSame(a,b) | a, b의 레퍼런스가 일치하는지 확인한다. |
assertTrue(a) | a가 true인지 확인한다. |
assertNull(a) | a가 null인지 확인한다. |
assertNotNull(a) | a가 null이 아닌지 확인한다. |
org.junit.jupiter.api.Assertions에서 더 많은 메소드를 확인할 수 있다.
JUnit 메소드 예제 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class JunitTest {
JunitTestClass a = new JunitTestClass();
JunitTestClass b = new JunitTestClass();
int[] arrA = {1, 2, 3, 4};
int[] arrB = {1, 2, 3, 4};
@Test
void test() {
assertArrayEquals(arrA, arrB);
assertEquals(1, 1);
assertEquals(1, 2); // error
assertSame(a, a);
assertSame(a, b); // error
assertTrue(true);
assertTrue(false); // error
assertNotNull(a);
assertNull(a); // error
}
}
AssertJ
AssertJ는 많은 Assertions을 제공하고 테스트 코드를 작성하는 데 사용되는 오픈 소스 라이브러리이다.
왜 AssertJ를 사용하는가
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class JunitTest {
@Test
void test() {
Assertions.assertThat("Modern Java In Action").isNotEmpty()
.contains("Java")
.doesNotContain("CPP")
.startsWith("Mod")
.endsWith("n")
.isEqualTo("Modern Java In Action");
Assertions.assertThat(3.14).isPositive()
.isGreaterThan(3)
.isLessThan(4)
.isEqualTo(3.14);
}
}
메소드 체이닝 방식을 지원하고, 직관적이다.
1
2
assertEquals(expected, actual); // JUnit
assertThat(actual).isEqualTo(expected); // AssertJ
JUnit과 비교하면 AssertJ가 훨씬 가독성이 좋다.
참고
This post is licensed under CC BY 4.0 by the author.