Junit 이란?
Junit이란 Java의 단위 테스팅(Unit Testing)
도구이다. 단 하나의 jar 파일로 되어 있다. Testing 결과를 단순히 문서로 남기는 것이 아니라 Test Class
를 그대로 남김으로써 추 후 개발자에게 테스트 방법 및 클래스의 History를 넘겨줄 수 있다.
특징
- 단위 테스트 Framework중 하나
- 단정문으로 테스트 케이스의 수행 결과를 판별
- Annotation(@)으로 간결하게 사용 가능
단정문
어노테이션
1. 초기화
public void setUp(){
//setup before testing
}
@Before 어노테이션을 이용하면 테스트 클래스 안의 메소드들이 테스트 전에 실행할 코드를 정의할 수 있다.
@BeforeClass
어노테이션을 사용한다면 메소드들이 몇번 실행되건 테스트전 해당 클래스에서 단 한번만 실행하도록 할 수 있다.
2. 해제
xxxxxxxxxx
public void tearDown(){
//teardown after testing
}
@After 어노테이션을 메소드 위에 선언한다면 테스트 클래스 안의 메소드들이 테스트 후 실행할 코드를 정의할 수 있다.
마찬가지로 @AfterClass
어노테이션을 사용한다면 메소드들이 몇번 실행되건 테스트전 해당 클래스에서 단 한번만 실행하도록 할 수 있다.
3. 테스트 메소드 정하기
xxxxxxxxxx
public void testSum(){
//testing
}
@Test 어노테이션을 메소드위에 선언하면 해당 메소드를 테스트 대상으로 지정할 수 있다.
4. 테스트 메소드 수행시간 제한
xxxxxxxxxx
timeout=5000) (
public void testSum(){
//testing
}
@Test(timeout='mili second') 어노테이션을 메소드위에 선언하면, 밀리 초 단위로 메소드의 수행시간을 제한하여 테스트 할 수 있다.
5. 테스트 메소드에 Exception 지정하기
xxxxxxxxxx
expected=RuntimeException.class) (
public void testSum(){
//testing
}
@Test(expected='exception.class')를 메소드위에 선언하면 해당 메소드가 선언된 exception을 발생시켜야 테스트가 성공되도록 할 수 있다.
IntelliJ에서 Junit을 이용한 UnitTesting
Project 구조
그림과 같이 main 디렉토리 하위에는 실제 소스코드가 위치하며 main과 같은 레벨에 test라는 디렉토리가 있으며 그 하위에는 main과 똑같은 구조로 디렉토리가 또 존재한다. 또 main하위에 존재하는 class들의 testClass가 1:1 대응하여 위치한다.
Test Code
@Before 어노테이션을 이용하여 test전 num1, num2를 초기화 한 후 setUp()메소드가 실행되었음을 확인하기 위해 "=== Before ===="를 콘솔에 출력한다. 또 cal()이란 테스트 메소드 위에 @Test 어노테이션을 선언하여 테스트 대상 메소드임을 지정하였으며 num1과 num2를 더하여 20이라는 틀린 값을 테스팅하도록 했다.
Error Testing
그림과 같이 !
마크가 나타나며 Testing 결과가 실패했음을 볼 수 있다. 콘솔을 확인하면 === Before ====가 출력되는 것을 볼 수 있다 이것을 토대로 Test 메소드 실행 전 @Before이 선언된 메소드가 실행되었음을 확인할 수 있다. 그 하단에 출력된 junit.fram ework.AssertionFailedError:~
를 확인한 결과 Testing의 결과로 20을 지정하였으나 실제로는 30이란 값이 나왔다고 알려주는 것을 볼 수 있다.
Success Testing
위 그림은 @Test가 선언된 메소드를 assertEqulas(30, num1+num2)
로 수정한 후의 그림이다. 녹색 체크 마크가 나타나며 Testing이 Pass 됨을 볼 수 있다.
'Test' 카테고리의 다른 글
Test - Test 코드를 작성해야하는 이유와, 방법 (2) | 2020.11.06 |
---|---|
Test - Intellij에서 Infinitest를 이용한 자동 단위테스트 설정하기(Infinitest란?, Infinitest 사용법) (0) | 2019.08.16 |
Test - TDD(테스트 주도 개발방법론)이란? (0) | 2019.03.03 |