테스트코드를 표현하는 방식중 하나이며, 단어에서 유추할 수 있듯 다음과 같은단계를 설정해 목적에 맞게 코드를 작성한다.
테스트를 수행하기 전에 테스트에 필요한 환경을 설정하는 단계. 테스트에 필요한 변수를 정의하거나 Mock 객체를 통해 특정 상황에 대한 행동을 정의
테스트의 목적을 보여주는 단계. 실제 테스트코드가 포함되며 테스트를 통한 결괏값을 가져오게 된다.
테스트의 결과를 검증하는 단계. 일반적으로 When단계에서 나온 결괏값을 검증하는 작업을 수행합니다. 결괏값이 아니더라도 이 테스트를 통해 나온 결과에서 검증해야하는 부분이 있다면 이 단계에 포함
Given-When-Then 패턴은 테스트 주도 개발에서 파생된 BDD(Behavior-Driven-Development)를 통해 탄생한 테스트 접근 방식
일반적으로 단위 테스트보다는 비교적 많은 환경을 포함해 테스트하는 인수테스트에서 사용하는 것에 적합하다고 알려져 있지만 단위테스트에서도 유용하다고 생각하고 있음.
Given-When-Then 패턴은 간단한 테스트로 여겨지는 단위 테스트에서는 잘 사용하지 않습니다. 그 이유는 불필요하게 코드가 길어진다는 것입니다. 하지만 이 패턴을 통해 코드를 작성한다면 '명세' 문서의 역할을 수행한다는 측면에서 도움이 된다.
'명세'에 대해서는 동의하는 부분이다. 간혹 코드를 인계받거나 작업에 들어갈 때, 테스트코드가 있다면 해당 메서드가 했던 역할을 파악하는데 도움이 된다. 명세서가 준비가 되지 않았어도 코드가 일정부분 도와주고 있어 다행이라고 생각한다. 자바에서는 아직 처음인데 JS에서는 jest 사용시, 나는 위와같이 Given, When, Then 구조로 작성했던 것 같다. 선임개발자분의 영향일지는 모르지만 이 부분에 대해서는 이해가 가는 정도다. 그렇다면 단위테스트에서는 어떻게 사용할까? 궁금해진다.