인프런 커뮤니티 질문&답변

김성규님의 프로필 이미지
김성규

작성한 질문수

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

회원 관리 웹 애플리케이션 요구사항

테스트 할 때 적는 //given, //when, //then에 대해서 질문드립니다.

해결된 질문

작성

·

189

1

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.

1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (/아니오)

[질문 내용]
여기에 질문 내용을 남겨주세요.
 
영상의 10분 근처에서 영한님께서
save와 findAll 테스트를 만들어주셨는데,
 
savegiven에서는 인스턴스를 하나 생성해서
when에서 인메모리 자료구조(가상 데이터베이스)에 저장하며
then에서 member객체를 직접 찾아오게 되었습니다.
그후 assertion을 진행하였습니다.
 
findAllgiven에서 역시 인스턴스를 생성하였는데,
이번엔 가상 데이터베이스에 저장하는 부분까지 given으로 넣게 되었습니다.
그리고 save에서는 assertion을 하기 위한 결과를 then에서 만들었었지만, findAll에서는 when에 이 부분이 들어가게 됩니다.
그리고 then에는 오직 assertion 구문만이 들어가게 됩니다.
 
given은 주어진 리소스, when은 주어진 리소스로 이루어진 행위,
테스트 하고자 하는 행위의 결과값을 구하는 과정,
then은 그 결과 값으로 맞는지 테스트 하는 과정이라고 이해 했었는데,
 
제가 이해한 대로라면, findAll의 when 부분에 가상 데이터베이스에 저장하는 과정 또한 들어가야 한다고 생각했습니다.
영한님께서 크게 생각 안하시고 그냥 작성하신건지 아니면,
혹시 제가 잘못 이해하고 있는 부분이 있는건지 알고싶습니다.
 
감사합니다.
 

답변 1

1

안녕하세요. 김성규님, 공식 서포터즈 David입니다.

given은 주어진 상황입니다.

데이터베이스에 회원 2명이 저장된 상황(회원 2명을 생성, 저장)에서/  테스트할 행위 findAll을 실행했고  / 예상되는 결과로 2명을 가지고 왔는지 검증하고 있습니다.

따라서, given절에 회원 2명의 생성과 저장 명령문을 배치하는 게 적절합니다.

 

아래 글을 참고해주세요.

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

 

Feature: User trades stocks
  Scenario: User requests a sell before close of trading
    Given I have 100 shares of MSFT stock
       And I have 150 shares of APPL stock
       And the time is before close of trading

    When I ask to sell 20 shares of MSFT stock
     
     Then I should have 80 shares of MSFT stock
      And I should have 150 shares of APPL stock
      And a sell order for 20 shares of MSFT stock should have been executed

감사합니다.

김성규님의 프로필 이미지
김성규
질문자

감사합니다. 잘못 이해하고 있었던 것 같습니다.

김성규님의 프로필 이미지
김성규

작성한 질문수

질문하기