Test Stub과 Mock의 차이점

고승원·2022년 11월 9일
0

Spring

목록 보기
1/14

강의 중 Stub과 Mock의 차이점에 대해 의문이 들어 찾아봤다.

Test Double

테스트 목적으로 실제 객체의 대역을 test double이라 한다.

  • Dummy - 객체를 전달하지만 실제로 사용하지 않는다.
  • Fake - 실제 작동하는 구현체지만 프로덕션에는 적합하지 않은 방식(ex.메모리 db)
  • Stub - 테스트중 생기는 호출에 미리 준비된 결과를 반환한다. 테스트 외에는 응답하지 않는다.
  • Spy - 호출에 대한 정보를 기록하는 Stub이다.
  • Mock - 호출될 것으로 기대되는 값으로 미리 만들어진 객체이다.

설명만 들었을 때 Stub과 Mock객체의 설명이 매우 비슷하다고 생각이 든다. 그렇다면 차이점은 무엇일까?

기존의 테스트에서 Test Double은 테스트 대상 객체가 Collaborator(ex.Repository 객체)가 필요한 경우에 만들어서 사용하는데, 두가지 이유가 있다.

  1. 테스트의 동작을 위함.
  2. 테스트의 상태 검증을 위함.

하지만 mock객체는 행동에 대한 검증을 한다.

기존 객체 사용법

  1. 객체 선언
  2. 검증

mock객체 사용법

  1. mock 객체는 선언 .
  2. mock에게 기대되는 동작을 선언.
  3. 검증.

차이점

기존(Stub등등)Mock
객체 선언설정객체 선언 - 기대되는 동작 선언
올바르게 작동했는지 상태 검증검증올바르게 호출 했는지 행동 검증
스스로 검증 x검증 주체스스로 검증
테스트 메서드 구현 해야함.추가 메서드추가 메서드 구현 x

정리

Test Double을 사용할 때 sut와 collaborator객체의 관계를 고려하여 선정해야 한다.

간단한 관계를 가질경우 어느 test double없이 기존 객체로 행동 검증을 하면 될 것이다.

그렇지 않다면 실제 객체를 사용하기는 까다롭기 때문에 test double을 사용하면 된다. stub, mock등을 결정하는 것 보다 test double을 사용하냐 하지않느냐를 결정하는게 중요하다!

stub과 mock의 차이점은 스스로 검증하는지, 행동,상태에 대한 검증인지이다.
이 부분을 고려해서 test할 때 활용해보자

profile
봄은 영어로 스프링

0개의 댓글