회고/코드스쿼드 - Java 과정

[TIL] 코드스쿼드 2022 백엔드 54일차 회고(11주차) - feat. Mock, Stub

jwKim96 2022. 3. 25. 03:07

오늘은 무슨 일이?

오프라인 모각코 & 페어프로그래밍

오늘은 , 민지노, 루시드, 데이브 와 오프라인 모각코를 했습니다.
화상으로는 자주 보던 분들이지만 실제로는 처음봐서 어색하지 않을까 걱정도 살짝 했지만, 만나보니 전혀 어색하지 않았습니다!
만나자 마자 얘기 나눌 시간도 없이 10시가 되어 각자 조원들과 스크럼을 했습니다.
오전의 마스터 수업은 민지노가 스터디룸의 큰 모니터에 연결해서 봤는데, 큰 화면으로 다같이 수업을 보니대학시절로 돌아간것 같았습니다 ㅎㅎ

POST 및 Redirectino 기능 추가

오후에는 루시드와 웹서버 만들기 3단계를 진행했습니다.
기존 로직을 리펙토링하고 POST 메소드 및 Redirection 을 지원하도록 구조를 변경하였는데, GET 만 지원할때 보다 더 복잡해졌습니다.
POST 일 경우 Request header 에서 Content-Length 헤더를 읽고, 그 크기만큼 Request body 를 읽어야 했습니다.
2단계에서는 Response 로 반환할 때, HTTP Status 만 필요하여 딱 이것만 반환하도록 만들었는데요.
이번 단계에서는 redirectUrl 도 추가로 지정할 수 있도록 변경하였습니다.

Mock vs Stub

오늘 스터디에서 이 Mock 과 Stub 의 차이에 대해 설명해주셨습니다.
정말 흥미롭게 들어서 이에 대해 더 궁금해져서 자료를 조금 더 찾아보았습니다.
그러던 중 마틴 파울러 아저씨가 작성한 옛날 글을 발견하여 일부만 읽어보았습니다.
(나중에 시간 내서 전체를 쭉 읽어봐야겠습니다)

Kind of test double

  • Dummy : objects are passed around but never actually used. Usually they are just used to fill parameter lists.
  • Fake objects : actually have working implementations, but usually take some shortcut which makes them not suitable for production (an in memory database is a good example).
  • Stubs provide canned answers to calls made during the test, usually not responding at all to anything outside what's programmed in for the test.
  • Spies are stubs that also record some information based on how they were called. One form of this might be an email service that records how many messages it was sent.
  • Mocks are what we are talking about here: objects pre-programmed with expectations which form a specification of the calls they are expected to receive.

출처 : https://martinfowler.com/articles/mocksArentStubs.html


위를 아주 간단하게 번역하고, 제가 이해한 내용을 덧붙여봤습니다.

  • Dummy : 실제로 사용되진 않고, 전달만 하는 객체(일반적으로 매개변수 목록을 채우는데 사용)
  • Fake objects : 동작하는 로직을 갖고있지만, 실제로 사용할 수준의 기능은 아닌 객체
    • 예를 들어, MemoryRepository 같은 객체
  • Stubs : 특정 기능의 호출에 대해 준비된 응답만을 제공함
    • 즉, stub 은 특정 기능이 정해진 상태만 반환하도록 사전에 정의하고, 해당 기능을 실행하고 결과를 검증함
  • Spies : stub 의 일종으로, 어떻게 호출되었는지의 정보를 기록합니다.
    • emailService 의 spy 를 만들면, emailService.sendMail() 가 실행될 때 횟수를 기록하는 형태로 활용 가능함
  • Mocks : 호출될 기능이 사전에 프로그래밍되어있는 객체
    • Controller 테스트 할때 Service 계층을 Mocking 하게되면, Stub 테스트가 가능하도록 사전에 프로그래밍된 Mock object가 주입됨
    • Spring 의 MockMvc 등..

간단하게 이렇게 정리를 해봤는데, 앞으로 조금 더 깊게 공부해보고 테스트 코드도 작성해봐야겠습니다.

인상깊었던 점은?

  • Mock, Stub 에 대해 공부하게 되었습니다.
  • 오프라인 모각코 재밌습니다!

아쉬웠던 것은?

  • 오늘은 일찍 일어나 홍대로 가야해서, 아침에 산책을 못했습니다.