티스토리 뷰
자바에서 단위 테스트를 작성하면서 느낀 주관적인 경험과 여러 자료들을 참고했습니다.
단위 테스트란?
인터페이스, 클래스, 메서드 등의 테스트를 작성하고 그것의 실행과 검증을 자동화 한 테스트
Gradle
testImplementation 'org.junit.jupiter:junit-jupiter:5.4.2'
testImplementation 'org.assertj:assertj-core:3.11.1'
단위 테스트 예시
public class CalculatorTest {
Calculator cal;
@BeforeEach
public void setUp() {
cal = new Calculator();
}
@Test
public void 덧셈() {
assertThat(cal.add(3, 4)).isEqualTo(7);
}
}
단위 테스트 장점
- 디버깅 시간을 줄여준다.
- 동작하는 문서 역할을 한다.
- 변화에 대한 두려움을 줄여준다.
단위 테스트에 대한 생각
1. 하나의 테스트가 모든 경우의 수를 대변하지는 못 한다.
위의 예시 코드에서 덧셈의 테스트가 통과되었다고 해서 모든 덧셈이 가능한지는 모릅니다. 위의 예시에서 계산기가 음수를 지원하지 않는다고 하면 cal.add(3, -4)의 코드가 어떤 상황을 발생시키는지 알 수 없습니다. 따라서 이러한 테스트를 추가로 작성하는 것이 좋습니다.
경계값을 고려해서 테스트를 추가 작성하면 이에 따라 내가 작성한 코드가 지원되는 범위를 더 깊게 생각해 볼 기회가 될 수도 있습니다.
2. 테스트 코드 작성이 어려운 부분은 분리해서 테스트한다.
검증하고자 하는 클래스나 메서드의 테스트 코드 작성이 어렵거나 크다면 그 부분이 여러 가지 책임을 지고 있는 경우일 수 있습니다. 객체지향 5대 원칙 중 단일 책임 원칙을 생각하면서 메서드나 클래스를 분리한다면 테스트 코드 작성이 더 쉬워질 수 있습니다.
3. private에 대한 테스트
private메서드의 테스트를 위해서 범위를 수정하는 것은 좋지 않다고 생각합니다. 그 메서드를 사용하는 메서드에 테스트를 추가하거나 아니면 2번을 고려해서 책임을 분리할 수 있는지 생각해 보면 좋을 거 같습니다.
출처
https://brunch.co.kr/@pubjinson/16
https://github.com/junit-team/junit5-samples/blob/r5.5.2/junit5-jupiter-starter-gradle/build.gradle