23.12.05 TIL

전주현·2023년 12월 5일

TIL

목록 보기
15/21

@Nested

같은 기능의 테스트들을 클래스로 묶어 그룹화 시켜주는 애노테이션이다. 사용법을 잘 몰라 1차 제출한 과제에는 적용하지 못했다.

적용하지 못한 코드를 조금 살펴보자!

@Test
void test1(){
	//given
    ~~~
    ~~~
    UserService userService = new UserService(~,~);
    Mockito.given(userRepository.findByUsername(username).willReturn(Optional.isEmpty());

    //when-then
    assertThrow(UsernameNotFoundException.class, ()-> userService.login(~,~));

    Mockito.given(userRepository.findByUsername(username).willReturn(Optional.of(user));
    assetEquals(requestDto.getUsername(), user.getUsername());
}

보통 이런식으로 오류 났을 경우 케이스와 성공 케이스를 같은 메소드 안에 두어서 여러번 given을 줬다가 뺐다가 하는 식으로 해서 무슨 기능을 가진 메소드인지 알기 어려워보였다.

강의에서 배웠던 그룹화를 해설 영상에서 사용하시는 것을 보고 코드를 수정해보았다.

@Nested
@DisplayName("로그인")
class login {
    @Test
    @DisplayName("로그인 성공)
    void test1(){
        //given
        ~~~
        ~~~
        UserService userService = new UserService(~,~);
        Mockito.given(userRepository.findByUsername(username).willReturn(Optional.of(user));

        //when-then
        assetEquals(requestDto.getUsername(), user.getUsername());
    }
    
    @Test
    @DisplayName("로그인 실패 - 존재하는 유저 없음)
    void test2(){
        //given
        ~~~
        ~~~
        UserService userService = new UserService(~,~);
        Mockito.given(userRepository.findByUsername(username).willReturn(Optional.isEmpty());

        //when-then
        assertThrow(UsernameNotFoundException.class, ()-> userService.login(~,~));
    }
}

이런식으로 클래스와 애노테이션을 사용해 그룹화를 시켜 메소드 별로 어떤 테스트 결과가 나올지 코드를 읽는 것 만으로 알 수 있게 되었다.

느낀 점

강의에서 들었던 개념을 처음부터 적용했다면 더 깔끔한 코드를 만들 수 있었을 것 같다.

아직 내가 놓친 부분이 많을텐데 하나하나 배워보자!

profile
개발

0개의 댓글