GivenWhenThen은 뭘까? (번역)

김명후·2023년 1월 23일
0

원문 링크

Given-When-Then은 테스트 코드를 표현하는 하나의 스타일입니다. 또는 이러한 스타일을 자주 애용하는 사람들은 이것을 SpecificationByExample을 사용하여 시스템의 행동을 명시화하는 것이라고도 합니다. 이러한 접근법은 BDD(Behavior-Driven-Development, 행동주도개발)의 한 부분으로써 Chris Matts와 Daniel Terhorst-North에 의해 개발되었습니다. 또한 Given-When-Then은 많은 테스트 프레임워크에서 구조화 접근법으로 나타납니다. 또한 여러분께서는 4단계 테스트 패턴의 재구성으로 볼 수도 있습니다.

하나의 시나리오를 세 개의 부분으로 분해하는 것이 핵심 아이디어입니다.

  • given은 코드 작성자가 특정 시나리오에서 지정한 행동을 시작하기 전에 세계의 상태를 서술하는 부분입니다. 여러분은 이것을 테스트의 선조건으로 생각할 수 있습니다.
  • when 섹션은 코드 작성자가 구체화하려는 행동입니다.
  • then 섹션은 구체화된 행동에서 작성자가 기대하는 변화를 서술하는 부분입니다.

우리는 계속 명시화라는 예시를 사용하면서 예시를 들었기때문에, 또한 예시를 통해 코드를 보여주는 것이 좋아보입니다.

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

위 예시는 Cucumber 테스트 프레임워크를 사용했습니다. Cucumber는 BusinessFacingTests를 작성하는 인기있는 방식입니다. 하지만 여러분께서 어떤 테스트 프레임워크를 사용하더라도 Given-When-Then 스타일을 사용할 수 있습니다. 몇 사람들은 이 스타일을 유닛 테스트 안에 정보 블록을 표시하기 위한 코멘트로서 사용하기도 합니다. 저 또한 이런 컨벤션을 정보문들을 구조화하기 위한 것으로 여긴 적도 있습니다.

이러한 접근법은 ands각 절마다 다수의 표현을 결합해서 사용하는 것이 일반적입니다.

저는 주어진 것을 사전 조건 상태의 설명으로 표현하는 것이 저의 선호방식이기 때문에 그렇게 정의했습니다. 하지만, 테스트 프레임워크는 주어진 것을 시스템 언더 테스트를 올바른 상태로 만드는 명령 집합으로 해석합니다. (그래서 다른 이름명 컨벤션은 이것을 "설정"으로 부릅니다.) 테스트 프레임워크는 그러한 쿼리 메서드를 제공하며, 이러한 메서드는 사이드 이펙트가 없도록 해야 합니다

Given-When-Then 스타일이 BDD의 한 부분임은 맞지만, 기본적인 아이디어는 테스트 코드를 작성할 때나 예시로 명세서를 작성할 때 아주 일반적입니다. Meszaros는 Given-When-Then 패턴을 4단계 패턴이라고 말합니다. 그의 4단계는 세팅하고(given), 실행하고(When), 입증한 뒤(Then) 그 코드를 해체시킵니다. Bill Wake는 그런 형식을 Arrange, Act, Assert로 여겼습니다.

0개의 댓글