티스토리 뷰

CS

Stub, Fake, Mock, Dummy, Spy

기억용블로그 2022. 9. 19. 16:41
728x90

유닛 테스트를 진행할때 사용하는 객체들에 대한 용어를 정리한다.

확실하게 정의가 내려진 용어가 아니므로 사람마다 의견이 다르기에 Martin Fowler의 정의+ @를 통해 정리하고자 한다.

Fake

Fake

실제로 동작하는 객체이나 테스트를 위한 목적으로 가볍고 단순하게 만들어져 있어 실제로 프로덕션 레벨에서 사용하기 부적합한 객체를 의미한다.

(e.g. fake web service, InMemoryTestDatabase etc)

 

Stub, Mock

Stub

테스트를 위해 미리 정해진 응답만을 하도록 만들어진 객체.

단순히 테스트를 도와주기 위해 동작하는 객체라고 볼 수 있다.

 

Mock

Stub 객체에 assertion이 추가된 객체.

Mock은 Stub의 superset으로 볼 수 있다.

 

Dummy

전달은 되지만 어떠한 경우에도 사용되지 않는 객체. 

주로 단순히 파라미터를 채우기 위해서 사용된다.

 

Spy

테스트 더블이 아닌 실체 객체가 들어와서 동작한다.

주로 partial mocking을 위해 사용되며 명시적으로 test를 위한 mocking을 하고자 하는 범위를 제외하고 실제 객체가 동작하게 된다.

 

레퍼런스

https://stackoverflow.com/questions/346372/whats-the-difference-between-faking-mocking-and-stubbing#:~:text=Stub%20%2D%20an%20object%20that%20provides,for%20stubs%2C%20mocks%20and%20fakes.

 

What's the difference between faking, mocking, and stubbing?

I know how I use these terms, but I'm wondering if there are accepted definitions for faking, mocking, and stubbing for unit tests? How do you define these for your tests? Describe situations whe...

stackoverflow.com

 

https://martinfowler.com/bliki/TestDouble.html

 

bliki: TestDouble

Test Double is generic term for fakes, mocks, stubs, dummies and spies.

martinfowler.com

 

'CS' 카테고리의 다른 글

현대 암호학의 역사  (0) 2022.11.08
Base64 인코딩  (0) 2022.11.03
직렬화(Serialization)  (0) 2022.08.26
URI, URL, URN의 차이점  (0) 2022.08.25
트랜잭션 격리 수준  (0) 2022.08.25
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
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
글 보관함