Test Code

[참고 글] Test Double

뭉지(moonz) 2024. 5. 17. 15:05
반응형

Stunt Double
배우와 유사한 모습과 행위를 할 수 있어, 영화에서 위험하고 역동적인 액션을 대신 수행하는 사람. Stunt Man/Woman이라고도 함.

 

이러한 의미에서 가져온 Test Double.

5가지 종류

  1. Dummy
    아무것도 하지 않는 깡통 객체.
    실제 객체를 모방하기만 한. 동작이나 행위에 대해 정의되어 있지 않음.
  2. Fake
    단순한 형태로 동일한 기능은 수행하나, 프로덕션에서 쓰기에는 기능이 부족한 객체
    Ex) FakeRepsotiroy : 실제 프로덕션에서는 DB에 직접 액세스하여 저장/조회하지만 Fake Repository에서는 memory map을 선언하고, 해당 객체에 저장/조회하는 방식으로 구현한다.
    ㄴ 이를 프로덕션에서 쓰기에는 기능이 부족함.
  3. Stub
    테스트를 수행하며 실제로 로직이 수행되지 않고 요청에 대해 정해진 결과를 제공하도록 객체를 세팅한다.
    그 외 정의하지 않는 것에는 응답하지 않는다.

    Mockito와 같은 가짜(Mock) 객체를 지원하는 테스트 프레임워크를 활용하여 가짜 객체에 원하는 결과를 Stub한다.
  1. Spy
    Stub + 테스트 코드를 수행하면서 호출된 내용을 기록해놓고, 관련된 정보를 제공하는 객체.
    일부는 실제 객체의 동작대로 동작/반환하고 일부는 개발자가 동작에 대해 미리 정의할 수 있다.
  2. Mock
    행위에 대한 기대를 명세하고, 그에 따라 동작하도록 만들어진 객체

Stub과 Mock 차이가 뭐지??
A. 검증하려는 목적이 다름.

  • Stub : 상태 검증. 객체의 내부 상태가 어떻게 바뀌었는지 체크하는 용도
  • Mock : 행위 검증. 어떠한 값을 주면 어떻게 응답한다.라는 행위를 검증하는 용도

ex) 메일 발송 시스템을 테스트한다했을 때,
Stub : 메일 발송 List의 크기가 1인지 체크.                                                        -> 상태 검증
Mock : 메일 발송 메서드가 1번 호출됐는지, 어떤 값들이 호출됐는지를 체크.       -> 행위 검증

반응형