유튜브 영상 설명
얄코 : https://www.youtube.com/watch?v=iks_Xb9DtTM
테코톡 : https://www.youtube.com/watch?v=1grtWKqTn50
잘 작동하고 깔끔한 코드를 얻기 위해 테스트 코드를 작성한다.
테스트 코드 작성의 장점
개발 과정 중 예상치 못한 문제를 미리 발견할 수 있다.
작성한 코드가 의도한 대로 작동하는지 검증할 수 있다.
코드의 변경, 추가, 삭제 시 사이드 이펙트를 줄일 수 있다.
Annotation
@Test
: 테스트 메서드임을 나타냄. 실행 가능
@BeforEach
: 각 메서드 실행 전에 무조건 실행
@BeforAll
: 현재 클래스의 모든 메서드보다 먼저 실행되어야하는 메서드 표시
@AfterAll
: 현재 클래스의 모든 메서드보다 나중에 실행되어야하는 메서드 표시
@RepeatedTest
: 메서드 반복 호출을 함을 표시
@DisplayName
: 사용자 지정 표시 이름을 선언
@AfterEach
: 각 메서드 실행 후 무조건 실행
좋은 테스트 코드는 새로운 기능을 구현, 코드를 리팩터링 하는 데에 좋지만, 의미 없는 테스트 코드는 코드를 작성하는데 필요한 에너지 낭비와 수정, 유지 관리에 비용이 든다.
테스트 하고자하는 구현 클래스
package lecture;
import java.util.List;
public class Practice { // 구현 클래스
public Integer sumInt(int a, int b) {
return a + b;
}
public Double average(List<Integer> integers) {
return integers.stream().mapToInt(Integer::intValue).average().getAsDouble();
}
}
구현클래스에서 생성된 테스트 클래스
package lecture;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import java.util.Arrays;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
class PracticeTest {
Practice practice = new Practice();
@Test
@DisplayName("sum 메소드 성공 테스트")
void sumTest() {
Integer sumInt = practice.sumInt(1, 2);
assertNotNull(sumInt);
assertEquals(sumInt, 3);
}
@Test
@DisplayName("average 메소드 성공 테스트")
void average() {
Double average = practice.average(Arrays.asList(1, 2, 3, 5, 6));
assertNotNull(average);
assertEquals(average, 3.4);
}
}
실행 단계 살펴보기
→ Stack 자료구조! Last-In, First-Out