우리는 왜 테스트코드를 작성하나? ( 테스트 코드(1) - 개념 )

KUN·2025년 6월 4일
post-thumbnail

왜 테스트 코드를 작성할까?

개발을 하면서 이런 경험, 누구나 해봤을 것이다.

기능 하나 수정할 때마다
서버 재시작 → Postman 실행 → 회원가입 → 로그인 → 토큰 발급 → API 호출...

매번 이런 반복 작업을 하는 건 비효율적이고 실수 가능성도 높다.
그래서 이런 과정을 자동화하기 위해 "테스트 코드 작성"에 도전하게 되었다.


테스트 코드란?

내가 작성한 기능이 의도한 대로 동작하는지 자동으로 확인해주는 코드다.

개발자는 항상
이렇게 동작해야지” 라는 기대 동작을 갖고 코드를 작성한다.
테스트 코드는 이런 기대 동작이 실제로 지켜지는지 컴퓨터가 대신 빠르게 검사해준다.

직접 확인하는 대신, 컴퓨터가 자동으로 테스트해주니 빠르고 정확하다.


오늘 주제는?

이번 글에서는 테스트의 종류보다는
테스트 코드 작성에 자주 쓰이는 도구들인
Stub / Mock / Spy 를 알아볼 것이다.


Stub - Wikipedia

고정된 응답을 제공하는 가짜 객체

- 호출 시 미리 정해둔 값만 반환한다.
- 실제 로직을 실행하지 않는다.

정해진 값만 반환 한다.


Mock - Wikipedia

실제 객체 대신 동작하며, 테스트의 독립성을 높여주는 가짜 객체

- 진짜 로직은 실행하지 않는다.
- 대신 "누가 어떤 메서드를 호출했는지" 등을 확인할 수 있다.

행동(호출 여부 등)만 관찰 가능하다.


Spy - Wikipedia

진짜 로직도 실행하면서, 호출 내용도 기록하는 객체

- 실제 메서드가 실행된다.
- 호출 횟수, 인자 등을 감시(기록)할 수 있다.

진짜 실행 + 감시 가능


Mockito - Wikipedia

Java에서 Mock / Spy / Stub 등을 쉽게 만들어주는 테스트 프레임워크다.

Mock = 가짜 객체
Mockito = 가짜 객체를 만드는 도구

어떻게 사용하나?

이제 기본적인 Stub, Mock, Spy 개념을 배웠으니,
실제로 Mockito를 이용해 간단한 테스트 코드를 작성해보자.

먼저 기본적인 테스트 코드 틀은 아래와 같이 구성할 수 있다.

위와 같이 코드를 작성한 후 실행하면 다음과 같은 결과가 출력된다

스프링 컨테이너는 동작하지 않는다?

테스트 코드를 작성한다고 해서 항상 Spring 컨테이너가 동작하는 것은 아니다.

위의 테스트는 순수한 단위 테스트(Unit Test)이므로 스프링 빈 주입 없이 동작한다.
(이 부분은 다음에 더 자세히 다루겠다.)

이렇게 하면 스프링 기반 테스트로 실행된다.
(이 부분도 역시 이후에 더 깊이 알아보자!)


우리는 왜 테스트코드를 작성해야 하나? ( 비유 )

수동 테스트는 한계가 있다

기능이 늘어날수록 일일이 수동으로 테스트하는 건 너무 느리고 비효율적이다.

자동차 정비 후 시운전

자동차를 수리할 때마다  
매번 시동을 걸고 도로에 나가서 테스트 운전을 해야 한다.

기능을 수정할 때마다  
서버를 켜고 Postman으로 API 테스트를 하고, 토큰을 발급받고 다시 호출하는 작업을 반복하게 된다.

테스트 코드를 작성하면  
자동 점검 시스템처럼 한 번에 결과를 확인할 수 있다.

변경에 대한 안전망이 필요하다

건물 공사 중 안전망

건물 구조를 바꾸거나 리모델링할 때  
안전망이 없으면 무너질까 걱정하게 된다.

테스트 코드는 안전망 역할을 한다.  
코드를 변경해도 기존 기능이 정상 동작하는지 자동으로 확인해준다.

덕분에 개발자는 안심하고 코드를 수정할 수 있다.

리팩터링을 마음껏 하기 위해

청소 후 확인하는 체크리스트

집을 청소하거나 가구 위치를 바꿀 때  
무언가 놓친 것이 없는지 일일이 확인해야 한다.

체크리스트가 있다면  
변경해도 문제가 없는지 쉽게 확인할 수 있다.

테스트 코드는 코드 리팩터링 시의 체크리스트 역할을 한다.  
덕분에 개발자는 안심하고 코드를 개선할 수 있다.

협업 시 코드에 대한 신뢰도를 높이기 위해

팀 프로젝트에서 자동 품질 검사

영화 촬영에서 팀원이 찍은 컷마다  
감독이 직접 확인하기는 어렵다.

자동화된 품질 검사 프로세스가 있다면  
팀원이 올린 컷이 기준에 맞는지 자동으로 검사할 수 있다.

테스트 코드는 팀 개발에서 자동으로 품질을 검사하는 도구다.  
덕분에 코드 리뷰 시 코드에 대한 신뢰도가 높아진다.

자동화된 테스트는 빠르다

빵 공장의 자동 품질 검사기

빵 하나하나를 사람이 직접 확인하면 느리고 실수가 발생한다.

자동 검사기는 빠르게 빵이 기준에 맞는지 검사할 수 있다.

테스트 코드는 코드에 대한 자동 검사기다.  
코드를 변경하거나 배포하기 전에 빠르고 정확하게 품질을 보장해준다.

배운 점 정리

Stub: 고정된 응답 제공
Mock: 가짜 객체 + 행동 검증
Spy: 진짜 실행 + 행동 검증
Mockito: Mock / Spy 등을 쉽게 만드는 도구
테스트 더블을 활용하면 테스트가 더 빠르고 안정적이다.

느낀점

  1. 이론적으로 쉽지 않았다. (Stub / Mock / Spy 차이 헷갈림)
  2. 처음 테스트 코드를 작성할 때 무엇을 먼저 해야 할지 감이 안 잡혔다.
  3. 직접 사용해보며 조금씩 익혔지만, Stub 설정이나 Mock의 verify 사용은 더 연습 필요하다.
  4. 앞으로 전체적인 테스트 흐름을 반복 연습하며 감을 익힐 계획이다.
profile
배우노라, 실험하노라, 기록하노라

0개의 댓글