3.6 KiB
category, tags, title, description, last_updated
| category | tags | title | description | last_updated | |||
|---|---|---|---|---|---|---|---|
| DevOps_and_Security |
|
Mocking Framework | 모킹 프레임워크(Mocking Framework)는 단위 테스트 수행 시 실제 서비스나 외부 종속성을 가짜(Mock) 객체로 교체하여, 비즈니스 로직을 변경하지 않고도 독립적인 테스트를 가능하게 하는 도구이다 [1]. | 2026-05-04 |
Mocking Framework
📌 Brief Summary
모킹 프레임워크(Mocking Framework)는 단위 테스트 수행 시 실제 서비스나 외부 종속성을 가짜(Mock) 객체로 교체하여, 비즈니스 로직을 변경하지 않고도 독립적인 테스트를 가능하게 하는 도구이다 [1]. 의존성 주입(DI) 구조의 유무에 따라 모킹의 복잡도가 크게 좌우되며, 시스템의 테스트 용이성을 결정짓는 핵심 요소로 작용한다 [1, 2]. 소스에 언급된 대표적인 모킹 도구로는 Java 생태계의 Mockito, React 환경의 Mock Service Worker(MSW), Node.js 환경의 proxyquire, rewire 등이 있다 [1, 3, 4].
📖 Core Content
- NestJS의 의존성 주입(DI) 기반 모킹 패턴: NestJS는 테스트를 1급 관심사로 취급하며, 의존성 주입 메커니즘을 통해 모킹을 매우 직관적으로 지원한다 [1]. 프레임워크가 제공하는 테스트 모듈을 사용하면 단 몇 줄의 코드만으로 모의(Mock) 종속성이 포함된 격리된 인스턴스를 쉽게 생성할 수 있다 [1, 5].
- Express에서의 수동 모킹 패턴: Express는 자체적인 테스트 전략을 강제하지 않으므로, 종속성 모킹을 위해
Jest,Mocha,Supertest등의 도구를 직접 구성해야 한다 [2]. 또한 구조적으로 결합도가 높은 경우, 의존성을 모킹하기 위해proxyquire나rewire와 같은 도구를 사용해야 하며 이를 위한 수동 설정 작업이 요구된다 [1, 2]. - Java 및 Spring Boot의 모킹 (Mockito): 헥사고날 아키텍처나 레이어드 아키텍처를 채택하는 Java 및 Spring Boot 기반 환경에서는 Java 컴포넌트의 단위 테스트를 위해
Mockito프레임워크가 필수적으로 활용된다 [4, 6]. Spring Boot는 Mockito를 사용한 단위 테스트부터 테스트 컨테이너를 활용한 통합 테스트까지 포괄적인 모킹 및 테스트 환경을 제공한다 [5]. - 프론트엔드 환경의 모킹 (MSW): React 애플리케이션 테스트 패턴에서는
Vitest,React Testing Library등과 함께Mock Service Worker(MSW)를 활용하여 데이터 페칭이나 외부 API 통신을 모킹하는 방식이 실전에서 사용된다 [3].
⚖️ Trade-offs & Caveats
프레임워크가 의존성 주입(DI) 구조를 강제하는지 여부에 따라 모킹을 위한 테스트 환경 설정의 트레이드오프가 명확히 발생한다 [1, 2].
NestJS나 Spring Boot처럼 구조화되고 DI를 제공하는 프레임워크는 비즈니스 로직 수정 없이 모의 객체(Mock)를 원활하게 교체할 수 있어 모킹 및 단위 테스트가 매우 간단해진다는 강력한 이점이 있다 [1, 2].
반면, Express와 같이 유연하고 뼈대를 강제하지 않는 프레임워크는 초기 개발의 자유도는 높지만, 종속성 모킹과 테스트 환경 설정을 위해 수동 작업이 많이 필요하다는 단점이 있다 [2]. 특히 수동으로 의존성을 모킹하거나 proxyquire 같은 외부 모킹 툴에 지나치게 의존하는 패턴은 자칫 테스트 코드를 지저분하게(hacky) 만들고 유지보수성을 저하시킬 수 있다는 제약 사항이 있다 [1].
Last updated: 2026-05-03