목록 보기
1. 통과하는 테스트 뒤에 숨어 있던 것들
백엔드

1. 통과하는 테스트 뒤에 숨어 있던 것들

아임웹
아임웹
2026년 8월 7일

두줄요약

통합 테스트가 없던 코드베이스에서 Mock이 급증한 원인과, AI가 그 관성을 더 키우는 구조를 정리했습니다. 실제 DB와 기록형 대역, 스냅샷, lint로 검증 기반을 바꿔 Mock 의존을 줄인 과정을 공유했습니다.

핵심 내용

  • 통합 테스트가 없던 TypeScript 서버에서 Mock이 급증한 배경과, 특히 AI 보조 작성이 Mock을 더 빠르게 늘리는 자기강화 루프
  • Mock은 외부 경계와 재현 불가 상황에만 두고, 내부 로직은 실제 DB 기반 통합 테스트나 인메모리 대역으로 검증하는 기준 정리
  • Testcontainers, WireMock, 기록형 Mock, 특성화 테스트, 스냅샷, lint 규칙으로 Mock 의존을 줄이고 안전하게 제거한 과정

구조와 흐름

  • 시작점: 통합 테스트 0개, Mock 1,336개에서 출발
  • AI가 Mock을 양산하는 네 가지 원인 분석: 낮은 문맥 요구, 빠른 종료 신호, 기존 관례 모방, 문서상 기본값
  • Mock을 세우는 대신 실제 출력과 나간 값을 검증하도록 테스트 구조 전환
  • 특성화 테스트와 lint 정비로 유닛 Mock을 삭제할 수 있는 기반 마련

선택 이유

  • 외부 API, S3, Redis 실패 같은 경계는 Mock이 적절한 검증 수단
  • 저장·조회 결과가 중요한 내부 로직은 실제 DB 통합 테스트가 더 정확한 검증 수단
  • 호출 여부보다 전송된 payload 자체를 보는 기록형 대역이 계약 검증에 더 적합

적용해볼 점

  • 테스트 대상이 내부 로직인지 외부 경계인지 먼저 구분
  • Mock 단언을 호출 횟수 대신 실제로 나간 값 검증으로 전환
  • 통합 테스트 인프라와 lint 게이트를 먼저 마련한 뒤 Mock 제거

댓글 0

댓글을 작성하려면 로그인이 필요합니다.

댓글을 불러오는 중...