TIL - 23.01.26

0

TIL

목록 보기
61/126

@Mock : Mock 객체를 만들어 반환해주는 어노테이션
@InjectMocks : 생성된 가짜 객체를 자동으로 주입시켜주는 어노테이션
@Spy : Stub하지 않은 메소드들은 원본 그대로 사용하는 어노테이션

  • Given-When-Then 패턴
    • given : 테스트에 필요한 변수를 정의하거나 Mock 객체를 통해 특정 상황에 대한 행동을 정의
    • when : 실제 테스트를 하는 메소드가 호출되며 테스트를 통한 결과값을 가져옴
    • then : When 단계에서 나온 결과값을 검증하는 작업을 수행
@Test
@DisplayName("유저 회원가입")
void signupUser() {
    // Request에서 받아오는 값 지정
    // given    builder는 가져오는 request에 @builder와 @AllArgsConstructor가 항상 같이 있어야한다.
    UserSignupRequest request = UserSignupRequest.builder()
            .username("user1")
            .nickname("유저1")
            .password("qweQWE123!@#")
            .build();

    // 유저네임 중복 확인
    // when ~ .thenReturn ~ : 어떤 상황에서 Mock 객체가 어떤 값을 리턴하도록 만들어줌
    // 가짜객체인 UserRepository에서 findByUsername으로 어떤 값이 리턴되는지
    when(userRepository.findByUsername(any(String.class)))  // 가짜 객체에 들어가는 인자를 아무 값이나
            .thenReturn(Optional.empty()); // findByUsername이 옵셔널이라서
    // 회원 중복 확인에서 레퍼지토리에서 username으로 찾아온 값이 empty여야하므로

    // 닉네임 중복 확인
    when(userRepository.findByNickname(any(String.class)))
            .thenReturn(Optional.empty());

    // when
    userService.signupUser(request);
    // then
    verify(userRepository.save(new User("user1", "유저1", "qweQWE123!@#")));

    // isA 어떤 클래스가 들어갈건지
    // any는 불확정한 값
    // verify(userRepository, times(1)).save(isA(User.class));
    }

0개의 댓글