독도갈매기의 개발 블로그

Stub? Mock? 둘의 차이는 뭘까? with. Test Double 본문

내가 몰랐던 지식

Stub? Mock? 둘의 차이는 뭘까? with. Test Double

독도갈매기 2023. 12. 15. 20:53

Test Double 의미는?

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

→ Mock 객체 의미로 잘못 알고 있던 것이 사실 Test Double을 의미하는 것이었음.

그렇다면 Mock 객체는 뭐였을까?

Mock Object 는 단순히 Test Double의 종류였을 뿐이다.

종류

Dummy

기본적인 테스트 더블.

인스턴스화 된 객체가 필요하지만 기능은 필요하지 않은 경우 사용.

때문에, Dummy 객체의 메서드가 호출되었을 때 정상 동작은 보장 ❌

Fake

복잡한 로직이나 객체 내부에서 필요로 하는 다른 외부 객체들의 동작을 단순화하여 구현한 객체

동작의 구현을 가지고 있지만, 실 Production에는 적합

Stub

Dummy 객체가 실제로 동작하는 것 처럼 보이게 만든 객체

인터페이스 또는 기본 클래스가 최소한으로 구현된 상태.

테스트에서 호출된 요청에 대해 미리 준비해둔 결과를 제공.

Spy

Stub 의 역할을 가지며, 호출된 내용에 대해 약간의 정보를 기록

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

실제 객체처럼 동작시킬 수 있고, 필요한 부분에 대해서는 Stub으로 만들어서 동작을 지정 가능.

Mock

호출에 대한 기대를 명세하고 내용에 따라 동작하도록 프로그래밍 된 객체.

Stub? Mock? 차이점이 뭘까?

개념을 보아도 잘 이해가 되지 않는다.

둘의 차이점은 뭘까?

Stackoverflow의 글을 읽어보면, 단순히 보다 똑똑한 Stub이 Mock 이라는 주장도 보인다.

What's the difference between a mock & stub?

그는 왜 Mock이 똑똑한 Stub이라고 말하는 것일까?

내가 이해한바로는 기능이 좀 더 다양한 Stub이 Mock이기에 이렇게 표현한 것이 아닐까 싶다.

Stub은 testFunction이 호출되면 “a” 라는 값이 반환되도록 설정되어 있다.

함수는 단순 호출뿐만 아니라, 매개 변수에 따라 결과 값이 달라지는데 이를 모두 커버하기에는 “a”만 반환되는 Stub은 멍청하다고 느낄 수 있다.

그렇다면 매개변수에 따라 다른 값을 제공할 수는 없을까?

위 경우와 같이 매개변수 값에 따라 다른 값을 제공받을 수 있도록 생성한.

보다 똑똑한 Stub이 Mock이라고 말할 수 있다.

테스트 더블에 대한 간단 개념과 Stub과 Mock의 차이점을 알아봤다.

Comments