단위 테스트 기본

단위 테스트를 진행하기 위해선 테스트를 진행하고자 하는 메서드를 단위 테스트 메서드로 지정해야 한다. @Test 어노테이션은 특정 메서드 위에 선언하는 것으로 해당 메서드가 단위 테스트 메서드임을 선언한다.
@Test 로 선언된 단위 테스틑 메서드는 따로 호출되는 경로가 없어도 단위 테스트 실행 시, JUnit이 자동으로 실행시켜 준다.

단위 테스트 클래스는 관례에 따라 접미사 “Test” 를 붙이도록 한다.

public class UnitTest {

    @Test
    public void test(){

        int a = 1, b = 2;
        System.out.println("a + b = " + (a + b)); // output: "a + b = 3"
    }
}

해당 코드를 작성 후, Run As… > JUnit Test 메뉴를 통해 단위 테스트를 실행 할 수 있다.


@Test 옵션

  • timeout timeout 은 테스트 메서드의 수행시간 제한 옵션이다. timeout 옵션이 걸린 테스트 메서드는 옵션에 설정된 시간(ms 단위)을 초과하면 자동으로 테스트 실패로 처리된다.
public class UnitTest {

    @Test(timeout=10)
    public void testTimeout(){

        int sum = 0;
        for(int i=1; i<=100000000; i++){
            sum += i;
        }
    }

}

상기 테스트 메서드는 10ms 의 수행시간 제한이 있으며, 테스트는 실패할 것이다. (환경에 따라서는.. 어쩌면 될지도?)

  • expected expected 는 테스트 중 Exception 이 발생하는지의 여부로 테스트의 실행 결과를 판단하는 옵션이다. 옵션으로 지정된 Exception 이 발생 시 성공, 발생하지 않은 경우 실패로 간주된다.
public class UnitTest {

    @Test(expected=NumberFormatException.class)
    public void test() {
        
        String str = "isNotInteger";
        int a = Integer.parseInt(str); // NumberFormatException occured
    }
}

상기 테스트 메서드는 Integer 로 변환 불가능한 문자열을 변환 시도 하였으므로, NumberFormatException 이 발생하며, expected 옵션의 Exception 과 일치하기 때문에, 테스트는 성공하게 된다.


Assert

assertEquals(a, b);

  • 객체 a와 b의 값이 일치함을 검증한다.

assertSame(a, b);

  • 객체 a와 b가 일치함을 검증한다. (연산자 ==)

assertArrayEquals(a, b);

  • 배열객체 a와 b가 일치함을 검증한다.

assertTrue(a);

  • 조건 a가 참인지 검증한다.

assertNotNull(a);

  • 객체 a가 null이 아님을 검증한다.