JAVA · 테스트
뮤테이션 테스트
코드를 의도적으로 변경하여 테스트의 품질을 검증하는 뮤테이션 테스트입니다.
테스트고급mutation-testPIT뮤테이션테스트품질
핵심 설명
코드를 의도적으로 변경하여 테스트의 품질을 검증하는 뮤테이션 테스트입니다.
Java code
// PIT 의존성: org.pitest:pitest-maven:1.15+
// 뮤테이션 테스트 개념:
// 1. 원본 코드에 "변이(mutation)"를 주입
// 2. 변이 예: if (a > b) -> if (a >= b), return a+b -> return a-b
// 3. 테스트가 변이를 감지(kill)하면 좋은 테스트
// 4. 감지 못하면(survived) 테스트 부족
// 원본 코드
class Calculator {
int add(int a, int b) { return a + b; }
int max(int a, int b) { return a > b ? a : b; }
boolean isPositive(int n) { return n > 0; }
}
// 테스트
// class CalculatorTest {
// Calculator calc = new Calculator();
//
// @Test void testAdd() { assertEquals(5, calc.add(2, 3)); }
// @Test void testMax() {
// assertEquals(3, calc.max(3, 1));
// assertEquals(3, calc.max(1, 3));
// assertEquals(3, calc.max(3, 3)); // 경계값!
// }
// @Test void testIsPositive() {
// assertTrue(calc.isPositive(1));
// assertFalse(calc.isPositive(0)); // 경계값!
// assertFalse(calc.isPositive(-1));
// }
// }
// 실행: mvn org.pitest:pitest-maven:mutationCoverage
class Main {
public static void main(String[] args) {
System.out.println("뮤테이션 종류:");
System.out.println("- 조건 변이: > -> >=, == -> !=");
System.out.println("- 수학 변이: + -> -, * -> /");
System.out.println("- 반환값 변이: return true -> return false");
System.out.println("- 제거 변이: 메서드 호출 제거");
}
}학습 팁
라인 커버리지 100%여도 뮤테이션 테스트에서 살아남는 변이가 있을 수 있습니다. 경계값 테스트가 부족한 경우가 많습니다.
주의할 점
뮤테이션 테스트는 실행 시간이 오래 걸립니다(코드량 * 변이 수만큼). CI에서는 변경된 코드만 대상으로 실행하세요.
자주 묻는 질문
뮤테이션 테스트란 무엇인가요?
코드를 의도적으로 변경하여 테스트의 품질을 검증하는 뮤테이션 테스트입니다.
뮤테이션 테스트 학습 시 주의할 점은 무엇인가요?
뮤테이션 테스트는 실행 시간이 오래 걸립니다(코드량 * 변이 수만큼). CI에서는 변경된 코드만 대상으로 실행하세요.
Continue Learning
Java 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.