JUnit 사용방법

Language/JAVA / / 2019. 10. 8. 13:18

신규 블로그를 만들었습니다!

2020년 이후부터는 아래 블로그에서 활동합니다.

댓글로 질문 주셔도 확인하기 어려울 수 있습니다.

>> https://bluemiv.tistory.com/

JUnit 테스트 방법1

필요한 라이브러리

  • junit-4.12.jar
import junit.framework.*;

public class JavaTest extends TestCase {

    protected int value1, value2;

    protected void setUp() {
        value1 = 3;
        value2 = 5;
    }

    public void testAdd(){
        double result = value1 + value2;
        assertTrue(result == 8);
    }
}

JUnit 테스트 방법2 (어노테이션 사용)

필요한 라이브러리

  • junit-4.12.jar
  • hamcrest-core-1.2.jar

assertEquals()

import org.junit.Test; // Test 어노테이션을 사용하기 위해
import static org.junit.Assert.*; // assert 메소드를 사용하기 위해

public class JavaTest2 {

    private int value1, value2;

    private void setUp() {
        value1 = 5;
        value2 = 6;
    }

    @Test
    public void testAdd() {
        setUp();
        double result = value1 + value2;
        assertEquals(12, result, 0); // 기대값, 데이터, 허용오차
    }
}

assertTrue( ); 대신에 assertEquals( ); 를 이용하여 할 수도 있다.

만약 원하는 값과 다르게 나오면 아래와 같이 출력된다.

java.lang.AssertionError:
Expected :12.0
Actual   :11.0

assertEquals() & assertSame()

import java.util.ArrayList;

import org.junit.Test;
import static org.junit.Assert.*;

public class JavaTest2 {

    private ArrayList<Integer> makeTestArray(int start, int end) {
        ArrayList<Integer> list  = new ArrayList();
        for(int i=start; i<end; i++) {
            list.add(i);
        }
        return list;
    }

    @Test
    public void testEqualsArray() {
        ArrayList<Integer> list1 = makeTestArray(1, 10);
        ArrayList<Integer> list2 = makeTestArray(1, 10);
        assertEquals(list1, list2); // 2개의 객체가 같은지 확인한다.

        // assertSame() 메소드는 객체의 주소를 비교하기 때문에 같은 원소를 가지고 있어도
        // 같은 객체가 아닌이상 테스트 실패한다.
        // 즉, assertSame() 메소드는 두 객체가 하나인 객체인지 비교할 때 사용한다.
        assertSame(list1, list2); // AssertionError
    }
}

assetArrayEquals()

배열이 동일한지 확인할 때는 assertArrayEquals() 메소드를 사용한다.

import java.util.ArrayList;

import org.junit.Test;
import static org.junit.Assert.*;

public class JavaTest2 {

    @Test
    public void testArrayEquals() {
        int[] array1 = {1, 2, 3};
        int[] array2 = {1, 2, 3};
        assertArrayEquals(array1, array2);
    }
}

실패한 경우 아래와 같이 출력된다.

# 원소의 개수가 다른 경우
java.lang.AssertionError: array lengths differed, expected.length=3 actual.length=4
...

# 원소 구성이 다른 경우
arrays first differed at element [3];
Expected :5
Actual   :4

Exception 테스트

원하는 Exception을 테스트를 할때는 Test 어노테이션에 expected 값으로 Exception 클래스를 넣어주면된다.

// 성공
@Test(expected = RuntimeException.class)
public void testRuntimeException() {
    throw new RuntimeException();
}

// 실패
@Test(expected = RuntimeException.class)
public void testRuntimeException() throws Exception {
    throw new IOException();
}

기타 옵션

Ignore

테스트를 하다보면 테스트를 생략하고 싶은 경우가 있을 수 있다.

이때는 Ignore 어노테이션을 사용한다.

import org.junit.Test;
import org.junit.Ignore; // Ignore 어노테이션을 사용하기 위해
import static org.junit.Assert.*;

public class JavaTest2 {

    @Test
    @Ignore // SKIP
    public void testAdd() {
        // ... 생략 ...
    }

    @Test
    @Ignore("테스트 생략") // SKIP
    public void testEqualsArray() {
        // ... 생략 ...
    }

    @Test
    public void testArrayEquals() {
        // ... 생략 ...
    }
}

Ignore 어노테이션이 붙어있는 메소드의 경우, 테스트를 하지 않고 넘어간다.

어노테이션 인자로 메세지를 넣어, 테스트 생략과 동시에 해당 메세지를 화면에 출력할 수 있다.

timeout

Test 어노테이션에 timeout 값을 이용하여, 테스트를 할때 제한시간을 설정할 수 있다.

@Test(timeout = 1000)
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기