티스토리 뷰

Back-end/Spring

Mock이란?

이안_ian 2020. 2. 18. 09:47




반응형

단위 테스트를 위해 한번에 메서드 하나만을 실행해보는 것이다. 이러한 메서드가 다른 네트워크, 데이터베이스 등등 제어하기 어려운 것들에 의존하고 있다면 어떻게 단위 테스트를 해야할까?

 

즉, 코드가 해당하는 Flow가 아닌 다른 부분에 많이 얽혀 있다면 단위 테스트를 하기 어려울 것이다. 따라서 이러한 것을 돕기 위해 Mock 이라는 것이 나타났다.

Mock이란?

실제 객체를 만들어 사용하기에 시간, 비용 등의 cost가 높거나 혹은 객체 서로간의 의존성이 강해 구현하기 힘들 경우 가짜 객체를 만들어서 사용하는 방법이다.

Mock 객체는 언제 필요할까?

  • 테스트 작성을 위한 환경 구축이 어려운 경우
  • 테스트가 특정 경우나 순간에 의존적일 경우
  • 테스트 시간이 오래 걸릴 경우
  • 개인 PC의 성능이나 서버의 성능문제로 오래 걸릴 수 있는 경우 시간을 단축하기 위해 사용한다.

Mock에 대한 기본적인 분류

1. 테스트 더블

-테스트를 진행하기 어려운 경우 이를 대신해 테스트를 진행할 수 있도록 만들어주는 객체를 말한다.

-Mock객체와 유사한 의미를 가지며 테스트 더블이 좀더 상위 의미로 사용된다.

 

2. 더미객체(Dummy Object)

-단순히 인스턴스화될 수 있는 수준으로만 객체를 구현한다.

-인스턴스화된 객체가 필요할 뿐 해당 객체의 기능까지는 필요하지 않은 경우에 사용한다.

 

3. 테스트 스텁(Test Stub)

-더미 객체보다 좀더 구현된 객체로 더미 객체가 마치 실제로 동작하는 것처럼 보이게 만들어 놓은 객체이다.

-객체의 특정 상태를 가정해서 만들어 특정 값을 리턴해 주거나 특정 메시지를 출력해 주는 작업을 한다.

-특정 상태를 가정해서 하드코딩된 형태이기 떄문에 로직에 따른 값의 변경은 테스트할 수 없다.

-즉, 어떤 행위가 호출됐을 때 특정 값으로 리턴해주는 형태가 Stub이다.

 

4 페이크 객체(Fake Object)

-여러 상태를 대표할 수 있도록 구현된 객체로 실제 로직이 구현된 것처럼 보이게 한다.

-실제로 DB에 접속해서 비교할 때와 동일한 모양이 보이도록 객체 내부에 구현 할 수 있다.

 

5. 테스트 스파이(Test Spy)

-테스트에 사용되는 객체, 메소드의 사용 여부 및 정상 호출 여부를 기록하고 요청시 알려준다.

-테스트 더블로 구현된 객체에 자기 자신이 호출되었을 때 확인이 필요한 부분을 기록하도록 구현한다.

-특정 테스트 메서드가 몇번 호출되었는지 필요한 경우 전역 변수로 카운트를 설정하고 특정 테스트 메서드에 카운트를 올리는 부분만 추가한 후 이 카운트를 가져오는 메서드를 추가한다.

-특정 메소드가 호출되었을 때 또 다른 메서드가 실행되어야 한다와 같은 행위 기반 테스트가 필요한 경우 사용한다.

 

6. Mock 객체(Mock Object)

-행위를 검증하기 위해 사용되는 객체를 지칭하며 수동으로 만들 수도 있고 프레임웍을 통해 만들 수 있다.

-행위 기반 테스트는 복잡도나 정확성등 작성하기 어려운 부분이 많기 떄문에 상태 기반 테스트가 가능하다면 만들지 않는다.

-Mock 객체는 테스트 더블 하위 객체로써의 좁은 의미와 테스트 더블을 포함한 넓은 의미 2가지로 사용될 수 있다.

 

이때 Mock Object는 행위검증에 사용하고, Stub은 상태검증에 사용하는 것이다.

 

Mock 사용시 유의사항

-Mock 프레임워크가 정말 필요한지 확인한다.

-Mock을 사용하는 경우 테스트 케이스 유지에 복잡성이 더해지기 때문에 Mock이 없는 의존성 적은 구조로 프로그래밍한다.

-어떤 Mock프레임워크를 사용하느냐는 핵심 문제가 아니다.

-Mock 객체는 Mock일 뿐이다.

-실제 객체로 작동을 해보았을 때 잘 작동하지 않을 수도 있다. Mock 객체는 흉내를 내는 객체이기 때문이다.

 

 

 

출처 : https://www.crocus.co.kr/1555

 

 

 

반응형
댓글
반응형
최근에 달린 댓글
글 보관함
Total
Today
Yesterday
최근에 올라온 글
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31