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

작성자 없음

작성자 정보가 삭제된 글입니다.

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

테스크 코드 작성할 때 given/when/then의 정확한 의미가 궁금합니다.

작성

·

1.9K

0

기존에는 테스트코드에 대한 중요성을 몰라서 그냥 따라 치기만 했었는데요
생각이 바뀌어서 강의를 들으면서 테스트 코드에 대한 것도 같이 배우면 좋겠다고 생각해서 테스트코드를 이해하고 공부하려고 하는데
혹시 김영한님이 테스트 코드 작성하실 때 쓰는 given/when/then의 정확한 의미가 어떻게 되나요 ?..
소스를 봐도 딱 개념을 정립하기에 어려움을 겪어 질문하게 되었습니다 ㅠㅠ

답변 1

0

안녕하세요. hjemsti님, 공식 서포터즈 OMG입니다.

정말 간단하게 기본 개념을 설명드릴테니 추가적인 학습으로 점진적으로 이해해 나가시길 바랍니다.

given: 테스트 하기 위해 기본적으로 세팅하는 값입니다.

when: 테스트를 하기 위한 조건을 지정합니다.

then: 테스트 하기 위한 행위가 우리가 예상하는대로 동작하는지 검증하는 행동/절차 입니다.


@Data
@NoArgsConstructor @AllArgsConstructor
public class Member {

private String name;

public String myGender(String gender) {
if (gender.equals("M")) {
return "남자";
} else {
return "여자";
}
}
}

class MemberTest {

@Test
void checkGender() {
// given
Member member1 = new Member("홍길동");
Member member2 = new Member("아이유");

// when
String hongGender = member1.myGender("M");
String IUGenger = member2.myGender("W");

// then
assertThat(hongGender).isEqualTo("남자");
assertThat(IUGenger).isEqualTo("여자");
}
}

1. Member 클래스는 성별 알파벳을 파라미터로 받아 남자 혹은 여자를 반환하도록 구현된 메서드가 존재합니다.

 

2. 작성한 메서드(myGender)의 동작이 제대로 하는지 테스트를 작성합니다.

 

3. given은 위의 설명대로 테스트 하기 위한 메서드 전의 세팅 값입니다.

 

4. then은 검증하기 위한 행위가 제대로 동작하는지 확인하는 과정입니다. 

M을 파라미터로 넘겼을 때 남자를 반환하는지, W를 파라미터로 넘겼을 때 여자를 반환하는지 확인하는 것을 볼 수 있습니다.

 

5. 간단히 생각하면  given/when/then 구조에서 given과 then이 아니면 when입니다.

검증하기 위한 행위를 진행하는 과정이라고 보시면 됩니다.

 

추가적으로 아래의 링크를 참고하여 정보를 더 획득하시길 바랍니다.

BDD 알아보기 (tistory.com)

감사합니다. 

작성자 없음

작성자 정보가 삭제된 글입니다.

질문하기