프로젝트에서 테스트 코드를 구현하며 배웠던 것들에 대해 정리해 볼 예정이다.
(2023.06.15 업데이트)
먼저 Junit4와 Junit5의 차이점에 대해 알아보자.
인터넷 자료를 찾다 보면 사용하는 어노테이션이나 메서드가 다르던데 버전의 차이 때문에 그런 것이었다.
Assert
Junit4 | Junit5 |
Assert class | Assertions class |
assertThat 메서드 | assertThat 메서드가 사라지고, assert* 계열의 다른 method |
Runner와 Extension
Junit4 | Junit5 |
@Runwith | @Extendwith |
또한, 추가적으로 Junit4와 Junit5의 차이점은 테스트 엔진에 있다.
Junit Vintage
Junit4에 대한 테스트 엔진
Junit Jupiter
Junit5에 대한 테스트 엔진, 그런데 Junit5에서는 Junit Vintage도 포함하고 있는 듯하다
테스트 코드 구현에 주로 사용했던 어노테이션은 다음과 같다.
@DisplayName
테스트 메서드의 이름이 복잡해서 가독성이 떨어지면 주석을 사용하는 데 사용했던 어노테이션이다.
주로, 테스트 메서드에 대해 happy case인지 sad case인지를 구분하는 용도의 주석으로 사용했다.
다음과 같이 사용하였다.
@Test
@DisplayName("happy case")
public void testReplaceCharacterFromText() {
...
}
@MockBean
이 어노테이션이 선언된 객체는 모의화된 bean이다. 의존성 주입 기능과 Mockito를 결합한 것이다.
따라서, 테스트에 필요한 bean 객체를 대체하여 동작시킬 때 사용한다.
@ExtendWith(MockitoExtension.class)
Junit5에서 클래스가 Mockito를 사용함을 명시적으로 알리기 위해 사용된다.
여기서 MockitoExtension.class는 Junit5 확장 클래스로, Mockito를 테스트에서 사용할 수 있도록 지원한다.
다음과 같이 class에 해당 어노테이션을 사용한다.
@ExtendWith(MockitoExtension.class)
class ItemReaderDelegateTest {
...
}
테스트 코드를 작성할 때는 Given-When-Then을 지켜서 테스트 코드를 구현했다.
Given
테스트에 필요한 환경을 설정하는 단계로서, 테스트에 필요한 변수를 정의하거나 Mock 객체를 통해 특정 상황에 대한 행동을 정의했다.
When
실제 테스트할 코드를 수행하며 결괏값을 리턴 받았다. 여기서 내가 테스트할 메서드를 호출하는 식으로 사용했다.
Then
테스트의 결과를 verify 하거나 assert 하는 단계이다.
테스트 코드를 작성할 때 private인 함수를 테스트할 때 처음에 public으로 메서드를 바꾸어 진행했었다. 그러나, 원래 노출될 필요가 없는 메서드였는데 public으로 노출되는 안 좋은 점이 있다 보니, 이 방식보다는 위임해서 사용하는 것이 좋다.
위임을 통해 다른 클래스가 담당해야 하는 메서드가 되도록 바꾸는 것이다.
'Spring' 카테고리의 다른 글
[Spring Batch] Spring Batch 정리 (0) | 2023.06.01 |
---|---|
[Spring] AOP (0) | 2022.10.27 |
[Spring]Mybatis 연결 - root-context.xml 설정 (0) | 2022.10.25 |
[Spring] 게시판 파일 기능 설정 (0) | 2022.10.24 |
[Spring] Filter, Interceptor (0) | 2022.10.21 |