Testing Pyramid

하이솝·2일 전

소프트웨어공학

목록 보기
25/27

테스팅 피라미드란?

핵심 원칙

  • 테스트 종류를 계층별로 나누어 비중을 조절하는 전략

  • 아래로 갈수록 많게, 위로 갈수록 적게

  • 각 계층은 서로 다른 속도, 커버리지, 특성을 가짐

필요한 이유

속도와 비용

  • 하위 테스트일수록 실행 속도가 빠르고 유지보수 비용 저렴

정확한 피드백

  • 오류 발생 시 버그의 위치를 즉시 파악 가능

신뢰성

  • 상위 테스트를 통해 실제 서비스 작동을 최종 보장

안티 패턴 경계

  • 아이스크림 콘 구조
    상위 테스트만 많다면 느리고 취약

유닛(Unit) 테스트와 코드 예시

함수·메서드의 독립적 로직 검증(Jest 스타일)

// 대상 함수: 10% 할인 적용
function applyDiscount(price) {
	return price * 0.9;
}

// 단위 테스트 코드
test('할인 계산 로직검증', () => {
  const result = applyDiscount(10000);
  expect(result).toBe(9000);
});

통합(Integration) 테스트와 코드 예시

모듈 간의 협력과 데이터 흐름 검증

test('회원가입 서비스 통합 검증', async () => {
  const newUser = { id: 'test_id', name: '홍길동' };
  // 1. 서비스 함수 실행 (DB  통신 발생)
  await userService.signUp(newUser);
  
  // 2. DB에서 데이터가 잘 저장되었는지 직접 조회
  const userInDb = await db.findUserById('test_id');
  expect(userInDb.name).toBe('홍길동');
});

E2E 테스트와 Playwright 코드

실제 사용자 관점의 전체 시나리오 보장

test('로그인 성공 후 메인 페이지 이동', async ({ page }) => {
  await page.goto('https://naver.com/login');
  await page.fill('#query', 'Playwright');
  await page.press('#query', 'Enter');
  
  // 결과확인:페이지제목검증
  await expect(page).toHaveTitle(/Playwright/);
});

요약 비교

0개의 댓글