반응형

안녕하세요.

JUnit의 생명주기, 즉 테스트가 수행되는 순서를 알아보겠습니다.

 

JUnit 순서

테스트가 수행될 때는 @Test 만 수행되는 것이 아닌 @BeforeClass, 생성자, @Before, @AfterClass 가 존재합니다.

생명주기를 이해하기 쉬운 방법 중 하나는 카운터를 세는 코드를 작성하시면 조금도 쉽게 이해할 수 있습니다.

일단 코드를 먼저 작성하겠습니다. (테스트 코드 기준은 JUnit4 입니다.)

public class JUnitLifecycle {
    private static int counter = 0;

    @BeforeClass
    public static void suiteSetup() {
        assertEquals(0, counter);
        counter++;
    }

    public JUnitLifecycle() {
        assertTrue(Arrays.asList(1, 5).contains(counter));
        counter++;
    }

    @Before
    public void prepareTest() {
        assertTrue(Arrays.asList(2, 6).contains(counter));
        counter++;
    }

    @Test
    public void peformFirstTest() {
        assertTrue(Arrays.asList(3, 7).contains(counter));
        counter++;
    }

    @Test
    public void performSecondTest() {
        assertTrue(Arrays.asList(3, 7).contains(counter));
        counter++;
    }

    @After
    public void cleanupTest() {
        assertTrue(Arrays.asList(4, 8).contains(counter));
        counter++;
    }

    @AfterClass
    public static void suiteFinished() {
        assertEquals(9, counter);
    }
}

1. @BeforeClass

테스트 클래스 시작 시 한번만 수행

-------------------------------------------------

2. 생성자

- 테스트 케이스 시작 전 호출

- (@Before/@After 이외에도 생성자도 호출이 되는 걸 인지해주세요)

 

3. @Before

- 테스트 케이스 시작 전 호출

- 테스트 값/상태 준비

 

4. @Test

- 테스트 케이스

- public이고 void 타입 값으로 반환

 

5. @After

테스트 케이스 종료 후 호출

- 테스트 후 정리

-------------------------------------------------

6. @AfterClass

모든 테스트 케이스 완료 후, 테스트 클래스 종료 전 수행

 

마지막 AfterClass 종료 시 카운터는 9인걸 보실 수 있습니다. 이유는 @Test(테스트 케이스)가 2번 호출이 되어 생성자와 @Before/@After 가 다시 한번 호출이 되었기 때문입니다.

 

핵심 메소드

assertEquals 			// 두개의 객체가 같은지 확인
assertTrue / asertFalse	// Boolean 결과값 확인
assertNotNull			// 객체가 Null이 아닌지 확인
assertArrayEquals		// 두 배열의 값이 같은지 확인

 

테스트 코드를 작성하기 위해서는 생각보다 많은 지식이 필요한 것은 아닙니다.

테스트 코드를 작성하기 어려운 프로젝트는 이미 개발이 많이 되어 있으며 모듈(함수/클래스) 단위가 커서 테스트 코드를 작성하기 어려운 소스코드가 존재할 때가 오히려 테스트 작성이 어렵습니다.

그렇기에 시작부터 프로그래밍을 하실 때는 항상 테스트코드를 생활화 하셔야겠습니다.

 

학습을 통해서 생명주기와, 핵심 메소드를 익혔습니다. 이제는 직접 테스트 코드를 작성하실 수 있겠습니다 :)

감사합니다.

반응형

+ Recent posts