Python

Fixture, Mock, Spy

Prower 2022. 7. 1. 00:28
728x90
반응형
  • python test를 공부하는 과정에서 용어에 대한 정리가 필요하다고 생각하여 정리한다.

fixture

A software test fixture sets up a system for the software testing process by initializing it, thereby satisfying any preconditions the system may have

ref: https://en.wikipedia.org/wiki/Test_fixture#Software

  • 번역하자면 소프트웨어에서 테스트를 진행하기 전에 설정되어야 하는 고정값으로 이해할 수 있다.
  • 테스트를 진행하기 전에 테스트에 대한 환경설정 혹은 테스트 케이스에 대한 값들이 있을 수 있겠다.
  • 예시로 데이터 베이스 설정, 테스트에대한 yaml 파일들의 설정 값 등을 들 수 있다.
  • 테스트를 실행하기 전, 후 혹은 특정 테스트에 대한 설정을 셋업 할 수도 있다.

mock

mock objects are simulated objects that mimic the behavior of real objects in controlled ways, most often as part of a software testing initiative

ref: https://en.wikipedia.org/wiki/Mock_object

  • 소스코드상의 특정 객체의 행동이나 패턴을 의도한 방식으로 모방하는 객체
  • 여기서 행동이나 패턴을 의도한 방식이라는 단어가 중요한 것 같다.
  • 비즈니스 로직상 외부 API 호출, DB 접근등의 작업이 들어가 있을 수 있다.
  • 실제 작동이 아닌 테스트를 실행하는 과정에서 이러한 작업등이 실제로 실행된다면
    • 테스트를 위한 코스트가 많이 들고
    • 실제 데이터에 대한 조작이 발생하며
    • 테스트 하고자 하는 기능에 대한 테스트가 불가능 할 수도 있다.
  • 따라서 테스트 과정에서 테스트하고자 하는 기능에서 벗어난 부분은 우리가 의도한 대로 행동하도록 변경할 필요가 있으며, 이를 mock 객체를 생성하여 대체한다.
  • 여기서 의도한 방향은 보통 실제 API를 호출하거나 DB 접근을 하여 데이터를 조작하는 로직을 테스트 상황에 맞게 행동하도록 반환값을 지정하거나, input값을 받도록 설정하는 것을 의미한다.

spy

  • spy는 보통 몰래 정보를 기록하거나 빼내는 역할을 수행한다.
  • 비유와 같이 테스트를 진행하는 과정에서 테스트와 관련된 기록을 하고 이를 확인하는 과정이 필요하다.
  • 예를 들어 어떤 함수를 실행했을 때 이 함수가 우리가 예상한 횟수 만큼 실행되었는지, 우리가 예상한 값을 input으로 받는지 등을 확인 할 필요가 있다.
  • mock 과 헷갈릴 수 있지만 mock이 기능에 대한 행위를 테스트하기 위해 사용한다면, spy 는 행위 보다는 함수가 예상된 대로 동작을 했는지에 더욱 관심을 갖는다.
  • 다만, 테스트 프레임워크 마다 차이가 있을 수 있는데, spy도 mock처럼 행위를 대체하는데 사용할 수 도 있다.

refs

728x90
반응형