woowacourse / tecoble-comments

0 stars 0 forks source link

post/2020-09-19-what-is-test-double/ #85

Open utterances-bot opened 1 year ago

utterances-bot commented 1 year ago

Test Double을 알아보자

테스트 더블(Test Double)이란? xUnit Test Patterns의 저자인 제라드 메스자로스(Gerard Meszaros…

https://tecoble.techcourse.co.kr/post/2020-09-19-what-is-test-double/?utterances=43cfff5a2a99b293dfe3f63duzKACQeLc0fUi4tz27iNZPMychybil0hiGcB88YNsZklQv5LLgyvRed2X%2BVJGIU1J%2Bfq3rmryAS1mDtbWk5FvNhlSxo3ZH2dLHKmtZ1vdPlVdIKF582RH9y6g%2FI%3D

roeniss commented 1 year ago

stub 과 mock 은 어떻게 다른가요?

CrackThrough commented 1 year ago

stub 과 mock 은 어떻게 다른가요?

저도 테스트는 잘 모르지만 글 읽어보고 제가 이해한 토대로 정리해봤습니다.

Stub

굳이 원문을 따 보자면

라고 하는데요, 여기서 둘째 제시문을 보면 기능을 테스트할 때 사용할 최소한의 구현만 한다고 하고, 마지막 제시문에서는 어디에서 가져온 값이 아닌 미리 준비해둔 결과만 제공한다고 했습니다. 이 점 Mock과 비교할 때 염두에 두시기 바랍니다.

Mock

여기는 예제를 보면 UserRepository를 그대로 가져다 쓰는 걸 볼 수 있습니다. 위 Stub 소개 문단에서 말한 "인터페이스 또는 기본 클래스가 최소한으로 구현된 상태이다."와 상반되기도 하고요.

그렇기 때문에 이 친구는 UserRepository를 재구현하거나 부분구현하지 않습니다. UserRepository를 이리저리 건드려보고, 그 객체가 무슨 행동을 하는지 감독하는 감독관 같은 객체라고 할 수 있겠네요.

이 문단의 제시문조차 "동작을 꾸민 객체"가 아니라 "호출에 대한 기대를 명세"하는 객체라고 하네요. 아마 제 생각엔 Stub을 소개한 문단에서 보여 준 예제와 가장 큰 차이점 중 하나가 이거 아닐까 생각합니다.

3줄 요약

  1. 모든 Stub이 그런진 모르겠지만 Dummy 객체에서 비롯했냐 아니냐에 차이가 있겠다.
  2. Stub은 최소한의 구현만 하고 결과를 미리 준비해두는 친구다. Mock은 그렇지 않다.
  3. Mock은 Stub과 달리 테스트할 객체를 재구현하거나 부분구현하지 않고, 있는 걸 그대로 가져다 쓸 수도 있다.

제가 글을 잘 못 써서 난잡해도 양해 부탁드립니다!! 즐거운 공부 되세요

roeniss commented 1 year ago

긴 의견 감사합니다. 원래는 이 용어들에 대해서 (본문을 읽어도) "그게 그거 아닌가?"하는 느낌을 지우기가 어려워서 저자의 생각을 질문드렸습니다.

@CrackThrough 님의 생각에도 별로 반박할 부분은 없다고 생각하지만 제겐 https://stackoverflow.com/a/3459431/8556340https://stackoverflow.com/a/27151309/8556340 가 설득력있게 느껴졌습니다.

근데 이 댓글 남기면서 든 생각인데, 여전히 잘 모르겠네요.