doortts / blog star
07-23
Open
#5 4장 - Mock 을 이용한 TDD star
07-23 Open

이전: 3장 - TDD 좀 더 잘하기
다음: 6장 - Unitils 단위 테스트 지원 라이브러리

안내: 본문을 읽지 않고 아래의 코멘터리만 읽는 걸 가정해서 작성하진 않았습니다.

4장 본문#

04-TDD-with-mock.pdf

읽기전에#

  • Mock Framework는 다 건너띄고 Mockito 만 보세요. 충분합니다.

도전과제#

  • Jest 기반에서 Javascript나 TypeScript로 실습을 따라갑니다

보충 설명#

  • 생일 역설 (Birthday Paradox)은 교양으로 읽어보세요
  • 요즘엔 Test Double 이라는 용어도 잘 안쓰고 그냥 Mock 객체, Mock을 만드는걸 Mocking 이라는 표현을 더 많이 씁니다.
    793-20187-23-2236-30.png
    • 하지만 알아두면 구분해서 표현할때 좋습니다.
    • 생각해보면 XUnit Test Patterns 책은 내용이 너무 끝까지 간 느낌이 있어요. (그걸 어떻게 다 봐!!)
  • Test Spy는 요즘도 종종 쓰게 되는것 같아요.
    • js 에서는 Sinon을 이 용도로 많이 썼습니다만 요즘은 대부분의 경우 Jest 가 Mock 이며 Spy 기능이 잘 되어 있어서 Jest 이외엔 따로 쓸 필요도 못 느끼는것 같습니다.
  • Snapshot 테스팅이라는 것도 있는데 보통 equals(expected) 나 toEqual(expected) 같은 assert구분을 쓸때 expected 를 일일히 다 미리 표현하기 어려운 경우 최초 실행시 result를 expected로 저장(실제로 파일등으로 저장)해 놓고 다음 실행시부터는 이전 snapshot과 동일한지 비교하는 방식의 테스팅입니다.

Property-Based Testing, PBT#

  • 최근에는 property-based testing (PBT) 도 등장해서 조금씩 사용되기 시작했습니다.
    • 예제기반 테스트에서도 예전엔 삼각측량이라는 표현으로 multiply(3, 3) = sum(sum(3, 3), 3) 과 같아야 한다는 방식으로 테스트코드를 작성하길 추천하는 스타일이 있었습니다. (sum은 신뢰가능한 함수라고 가정)
    • 하지만 이것도 예제기반으로 사람이 케이스를 작성하는 것이었다면 PBT는 시스템의 range 기반 auto generation 과 randomizing 을 기반으로 기계적으로 값을 검증하고 fail 케이스를 찾아내는 방식입니다.
    • 참고:
  • JUnit 쪽에서도 이미 예전에 Parameterized Test 와 Theory 라는걸 지원하고 있었습니다.

좀 더 강조 되었어야 했다고 생각하는 부분 #

  • 챕터 뒷부분에서 저자 한마디로 표시할 것이 아니라 예제 소스에서 시작부터 // Given // When // Then 주석을 사용했어야 했다.
    438-20187-23-2236-53.png
  • Mock 사용 시 유의사항은 꼭 읽어보세요.
    • Mocking을 할때는 대상이 되는 서버나 API, 데이터는 자주 변하지 않는 대상이 되어야 합니다.
    • 즉, 서버도 한창 개발중이라 api 가 계속 바뀔때는 layering 에 대한 mock 기반 테스트는 현실괴리만 높이는 경우가 생깁니다.

깨알#

  • 책 쓸 때(초안 2008년)만 해도 MD5를 예제에서 쓸만 했는데 이젠 SHA1도 충돌이 문제되는 시절이네요.

5장 예고 #

5장은 PDF 파일만 올릴 예정입니다. 할말이 없어요.
691-20187-23-2231-59.png

이유는...
337-20187-23-2229-17.png

어잇쿠! 마우스 드래그 실수로 여기 이미 올렸네요! (거짓말)
05-DbUnit.pdf

6장 예고 #

786-20187-23-2230-51.png

Issue Sharer
Comment 2

    • Markdown help
    • Headers
    • Links
    • Lists
    • Images
    • Blockquotes
    • Codes
    • Tables
    • Styling
    • Short Links
    • Markdown Input
      Markdown Output
      # This is an H1
      ## This is an H2
      ### This is an H3
      
      # This is an H1 ## This is an H2 ### This is an H3
    • Markdown Input
      Markdown Output
      - Red
          1. White
          2. Blue
      - Green.
      
      - Red 1. White 2. Blue - Green
    • Markdown Input
      Markdown Output
      ![title](https://repo.yona.io/assets/images/ico-like-small.png "Yobi")
      
      ![title](/assets/images/ico-like-small.png "Yobi")
    • Markdown Input
      Markdown Output
      > Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
      >
      > Aenean commodo ligula eget dolor.
      
      > Lorem ipsum dolor sit amet, consectetuer adipiscing elit. > > Aenean commodo ligula eget dolor.
    • Markdown Input
      Markdown Output
      `function test() {console.log("hello world");}`
      
      ```javascript
      function test() {
        console.log("hello world");
      }
      ```
      
      `function test() {console.log("hello world");}` ```javascript function test() { console.log("hello world"); } ```
    • Markdown Input
      Markdown Output
      | Default      | Align center | Align right |
      | ------------ | :----------: | ------: |
      | Carrot       | Red          | 1,000   |
      | Banana       | Yellow       | 32,000  |
      
      | Default | Align center | Align right | | ------------ | :----------: | ------: | | Carrot | Red | 1,000 | | Banana | Yellow | 32,000 |
    • Markdown Input
      Markdown Output
      *This is an italic*
      **This is an bold**
      ~~This is an strike~~
      
      *This is an italic* **This is an bold** ~~This is an strike~~

    TDD 자료 잘 보고 있습니다.

    04-TDD-with-mock.pdf 파일이 첨부되지 않은것 같아 댓글 남기게 되었습니다.

    공유해주셔서 감사합니다.

    알려주셔서 고맙습니다! 수정해놓았습니다!

    - doortts 07-24
Add a comment
New subtask
Assignee
No assignee
Due date
No due date