유닛테스트(단위테스트)
- 소프트웨어 개발 과정에서 소스 코드의 작은 단위인 메소드, 클래스, 모듈 등이 예상대로 잘 동작하는지를 검증하는 테스트이다.
즉, 소프트웨어의 각 구성요소들이 개별적으로 올바르게 작동하는지를 검증하는 절차이다.
- 프로그램을 작은 단위로 쪼개어 각 단위가 정확하게 동작하는지를 검사함으로써 프로그램의 안정성을 높인다.
- System.out.println()으로 하는 번거로운 디버깅이 필요없으며, 개발기간 중 대부분을 차지하는 디버깅 시간을 단축한다.
JUnit
- Java 언어를 위한 오픈 소스 단위 테스트 프레임워크이다.
- 소스 코드의 작은 단위인 메소드, 클래스, 모듈 등을 테스트할 수 있다.
- 단위 테스트를 작성, 실행 및 관리하기 위한 다양한 기능을 제공한다
- assertXXX를 사용하여 테스트 한다.
Assertion(단정문)
- JUnit에서 기본으로 제공하는 테스트 API이다.
- 구현된 프로그램에 대해 맞다는 가정 하에 적합성을 검증한다.
- 프로그래머가 가정한 바가 그대로 구현되었는지 확인한다.
- 밑에 적은 여러 메서드들을 제공하며, 테스트 시 비교하거나 제한을 두어 진행할 수 있도록 도와준다.
Assertion(단정문) 활용
- assertArrayEquals(a, b) : 배열 A와 B가 일치하는지 확인한다.
- assertEquals(a, b) : 객체 A와 B가 같은 값을 가지는지 확인한다.
- assertEquals(a, b, c) : 객체 A와 B가 같은 값을 가지는지 확인한다. (c는 오차범위)
- assertSame(a, b) : 객체 A와 B가 같은 객체인지 확인한다.
- assertTrue(a) : 조건 A가 참인지 확인한다.
- assertNotNull : 객체 A가 null이 아닌지 확인한다.
- assertThat : 검증 값이 특정 상황을 만족하는지 확인한다.
Annotation 활용
- @Test : 테스드 대상 메소드임을 의미한다.
@Test
public void testSum() {
}
// 시간단위 : 밀리 초
// 결과를 반환하는데 4,000밀리 초를 넘기면 테스트 실패
@Test(timeout=4000)
public void testSum() {
}
// RuntimeException이 발생해야 테스트가 성공, 그렇지 않으면 실패
@Test(expected=RuntimeException.class)
public void testSum() {
}
// 모든 단위 테스트 실행 전에 최초로 한 번 실행(static 필수!)
@BeforeClass
public static void setUpBeforeClass() throws Exception {
}
// 모든 단위 테스트 실행 후에 마지막으로 한 번 실행(static 필수!)
@AfterClass
public static void tearDownAfterClass() throws Exception {
}
- BeforeEach : 단위 테스트 실행 전마다 실행(= 단위 테스트 갯수만큼 여러 번 실행)
- AfterEach : 단위 테스트 실행 후마다 실행(= 단위 테스트 갯수만큼 여러 번 실행)
- Disabled : 해당 단위 테스트 실행 안함(무시함)
- DisplayName : JUnit 실행 창에 해당 단위 테스트의 메소드명 대신 parameter 값(문구) 출력