Maven, Gradle 기반의 Java 프로젝트를 사용할 경우 기본적으로 구성되는 구조이다.
우리는 test 패키지에 테스트 코드와 관련된 리소스 파일을 이용하여 테스트하면 된다.
테스트 대상 코드
public int getBalance() {}
테스트 코드
@Test
public void testGetBalance() {}
대상이 되는 클래스의 메소드와 1:1로 연관지어 생각할 수 있는 장점이 있는 반면에 테스트 케이스가 하나의 테스트 메소드에 존재할 경우, 초반에 있는 테스트 단정문(Assert)이 실패하면 뒤에 오는 단정문에 실행이 보장되지 않음
테스트 대상 코드
public void withDraw(int money) {}
테스트 코드
@Test
public void testWithDraw_마이너스통장인출() {}
@Test
public void testWithDraw_잔고가0원일때() {}
기본적으로 테스트 대상 코드의 메소드 단위를 작성한 후, 케이스별로 테스트 메소드를 추가하는 방식이다. 보통 이렇게 작성한다고 하면 상세 케이스들은 메소드 이름 뒤에 밑줄(_)을 붙여 구분한다. 한글을 써도 무방하니 적극 사용하도록 하자
통합 테스트나 사용자 테스트에 가까운 형태로 테스트 케이스가 필요할 때 사용한다. 작성 대상 클래스의 메소드 구현을 위해 사용한다기보단 테스트 시나리오에 집중해서 대상 클래스 자체의 통합적인 기능을 테스트할 때 사용한다.
필자가 이해한 바로는 테스트 대상이 메소드 단위가 아닌 클래스인 경우 러프하게 테스트 메소드를 작성할 때 사용할 것 같다. 🤔
예시를 보자
public class 환승테스트 {
@Test
public void 평일_30분이내에_환승_성공한다(){
// 테스트 케이스
}
@Test
public void 평일_30분이후에_환승_실패한다(){
// 테스트 케이스
시나리오가 대상이 된다.
}
}
예시와 같이 선조건 -> 수행 -> 예상결과 식의 테스트 시나리오를 갖는다.