피드로 돌아가기
I Replaced 2,000 Lines of Go Mocks With 200 Lines of Fakes
Dev.toDev.to
Backend

Mock 제거 통한 테스트 코드 90% 감축 및 리팩토링 유연성 확보

I Replaced 2,000 Lines of Go Mocks With 200 Lines of Fakes

Gabriel Anhaia2026년 4월 28일10intermediate

Context

Mock 프레임워크 기반의 테스트가 구현 세부 사항에 강하게 결합되어 단순한 시그니처 변경에도 수백 라인의 테스트 코드가 깨지는 현상 발생. 행위(Behavior)가 아닌 구현(Implementation)을 검증하는 Mock Tax로 인한 유지보수 비용 급증 상태.

Technical Solution

  • Interface 기반의 Port-Adapter 구조를 활용한 In-memory Fake 구현체 도입
  • .EXPECT() 체인 기반의 호출 순서 검증에서 상태 기반의 결과 검증(State-based Verification)으로 전환
  • 데이터 저장 및 제약 조건 강제가 가능한 가벼운 In-memory Storage 설계로 실제 DB 동작 모사
  • 호출 여부 확인이 필요한 경우 최소 기능의 Spy 객체를 활용한 기록 기반 검증 수행
  • Hexagonal Architecture 적용을 통한 외부 의존성 격리 및 테스트 경계 명확화
  • Fake와 Real Adapter 간의 동작 일치성을 검증하는 Conformance Test 체계 구축

- 내부 로직 순서 변경만으로 테스트가 깨지는지 확인하여 Mock 의존도 진단 - 복잡한 `.EXPECT()` 체인 대신 상태를 저장하는 In-memory Fake 도입 검토 - 단순 호출 기록 확인은 프레임워크 없이 5라인 내외의 Spy 객체로 대체 - Interface 크기를 최소화하여 Fake 구현 비용을 낮추는 설계 적용

원문 읽기