inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

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

2076

작성자 없음

작성한 질문수 0

0

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

spring MVC

답변 1

0

OMG

안녕하세요. 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)

감사합니다. 

servlet과 container에 대한 질문입니다

0

25

1

api를 어느 컨트롤러에 작성해야하는지는 어떤 기준으로 해야하나요?

0

64

1

jsp 의존성 수정 요청

0

80

2

요즘 웹 서버가 주로 사용되는 이유는 SPA 구조 때문일까요 ?

0

143

1

save() 메서드 문의

0

67

1

절대 경로로 templates/basic 하위 파일 열면 css 적용 안되는 현상

0

101

1

request-body-json

0

83

2

MVC 패턴의 적용 단위

0

97

1

RequestMapping을 이용한 핸들러, 어댑터

0

119

2

save 후 결과화면

0

89

2

jsp를 이용한 view

0

97

1

application.properties에 debug 추가해도 결과가 똑같습니다.

0

178

1

수업 코드 제공 관련 문의

0

97

2

RequestMappingHandlerAdapter의 Controller 호출 과정

0

100

3

파일 오픈 시

0

70

1

스프링 배치 관련

0

78

1

@RequestParam의 defaultValue가 blank 값도 처리하는 지 여부

0

112

1

postman으로 /request-body-json-v1 호출시 500 error

0

96

1

프론트엔드와 백엔드의 mvc, rest api에 대한 질문

0

79

1

모델의 역할과 계층 분리에 대한 이해 차이 + 추가질문

0

111

1

console log 출력 관련 질문입니다.

0

75

1

애플리케이션이 실행 되지 않습니다 ㅠㅠㅠ

0

139

1

html 변경하는 부분 적용 문제

0

103

1

한글 깨짐

0

77

2