Post

JUnit & AssertJ (추가 예정)

JUnit

JUnit이란 자바용 단위 테스트(유닛 테스트) 프레임워크이다. 여기서 단위 테스트란 애플리케이션 코드 블록(일반적으로 함수 또는 메서드)가 개발자의 이론적 논리에 따라 예상대로 실행되는지 확인하는 코드 블록이다. JUnit을 사용하면 System.out.println()을 사용하여 콘솔로 확인하지 않아도 메소드가 의도대로 실행되는지 테스트할 수 있다.


JUnit Annotation

AnnotationDescription
@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 메소드

MethodDescription
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가 훨씬 가독성이 좋다.

참고

JUnit docs
AssertJ docs
AssertJ 예제

This post is licensed under CC BY 4.0 by the author.