의문
데브코스에서 백엔드 프로젝트의 테스트 코드를 작성하던 중,
어느곳에서는 given()을 쓰고, 어느곳에서는 when()을 썼다.
둘 다 하는 기능은 똑같은데 왜 다른 이름을 쓰는걸까? 하는 의문점이 생겼다.
when() 은 org.mockito.Mockito 를 import 하고, given()은 org.mockito.BDDMockito를 import한다.
Mockito란?
우리는 객체간의 의존성에 대한 설계만 잘해주면 스프링에서는 DI를 지원해주어 알아서 객체들간의 의존성 관리를 해준다.
하지만 테스트를 하게될 때, 의존 관계를 맺고 있는 다른 객체가 있는 경우 다른 객체에 의해서 테스트 결과각 영향을 받을 수 있다는 문제가 있다. 이런 경우 우리는 테스트 대상을 고립되게 만들어야 하는데 그것을 지원해주는게 스프링의 테스트 프레임워크인 Mockito 이다.
우리는 이제 Mockito를 사용해 @Mock 하나로 Mock 객체를 만들어 우리가 원하는 동작만 할 수 있게 정해둘 수 있다 !
그렇다면 BDDMockito 는 뭐야?
우선 BDD란 행위 주도 개발을 말한다.
테스트 대상의 상태의 변화를 테스트 하는 것으로, 흔히 다들 테스트할 때 작성하는 given, when. then 이다.
Mockito의 when()을 사용해서 BDD 방식의 테스트 코드를 작성해보자
@Test
void hasSkill_AlwaysTrue() {
// given
when(skills.hasSkill()).thenReturn(true);
// when
boolean actual = person.hasSkill();
// then
assertThat(actual).isTrue();
}
when()이 given 아래에 쓰이다니 별로다.
이를 해결하기 위해 나온것이 BDDMockito이다.
BDDMockito는 Mockito를 상속한 클래스이다.
시나리오에 맞게(given -> when -> then) 테스트 코드가 읽힐 수 있게 도와주는 프레임워크이다.
결론
BDD test 패턴을 사용하고자 할 때 BDDMockito의 given()을 사용하는것이다.
기능은 똑같다. 단지 테스트 코드의 가독성을 위한 클래스의 메서드임이 차이다. !
References
https://tecoble.techcourse.co.kr/post/2020-09-29-compare-mockito-bddmockito/
'스프링' 카테고리의 다른 글
7/9 스프링 핵심원리 - 스코프와 프록시 (0) | 2022.07.09 |
---|---|
7/9 스프링 핵심원리 - 웹스코프,스코프와 Provider (0) | 2022.07.09 |
7/9 스프링 - 빈스코프,프로토타입 스코프 (0) | 2022.07.09 |
7/6 스프링 핵심원리 - 빈 생명주기 콜백 (0) | 2022.07.09 |
7/6 스프링 핵심원리 - 자동, 수동의 올바른 실무 운영 기준 (0) | 2022.07.09 |