Peony의 기록 창고 🌼
article thumbnail
반응형

어노테이션

@DataJpaTest 
@ActiveProfiles("test") 
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
  • @DataJpaTest: JPA 관련 컴포넌트만 로드하여 테스트를 수행. 일반적으로 인메모리 데이터베이스를 사용하여 빠르게 테스트를 실행한다.
  • @ActiveProfiles("test"): 테스트 환경 설정
  • @AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE): 기본적으로 @DataJpaTest는 인메모리 데이터베이스를 사용.
    replace = AutoConfigureTestDatabase.Replace.NONE 를 해주면 실제 데이터베이스를 사용할 수 있다.

 

의존성 설정

private final UserRepository userRepository;  

private OAuth2UserInfo userInfo;  
private UserEntity user;  

@Autowired  
UserRepositoryTest(UserRepository userRepository) {  
    this.userRepository = userRepository;  
}
  • userInfo, user: 테스트에 사용할 사용자 정보를 저장하는 객체

만약, @Autowired 어노테이션을 사용하여 생성자 주입을 한 이유가 잘 모르겠다면, 아래 게시글을 한 번 보고 오자.
https://myeongju00.tistory.com/89

 

[Spring] 의존 관계 자동 주입

주입 방법 1. 생성자 주입 생성자 주입은 생성자 호출 시점에 딱 1번만 호출되는 것이 보장된다. 주로 불변, 필수 의존 관계에서 사용한다. 만약, 생성자가 1개인 스프링 빈이면? @Autowired를 생략해

myeongju00.tistory.com

 

테스트 기본 설정

@BeforeEach
void setUp() {
    userInfo = new AppleOAuth2UserInfo(
            "",
            "test@test.com"
    );

    user = userInfo.createUserEntity();
    userRepository.save(user);
}

@AfterEach
void tearDown() {
    userRepository.deleteAll();
}

  • @BeforeEach: 각 테스트가 실행되기 전에 실행된다. 주로 테스트에 필요한 데이터를 설정
  • userInfouser 객체를 생성하고 저장
  • @AfterEach: 각 테스트가 실행된 후에 실행된다. 데이터베이스를 초기화하여 테스트 간의 독립성을 유지해준다.

 

사용자 저장 테스트

사용자가 데이터베이스에 제대로 저장되는지 테스트해보자.

@Test
@DisplayName("사용자 저장 테스트")
void save() {
    UserEntity savedUser = userRepository.findByEmail(user.getEmail()).orElse(null);

    assertThat(savedUser).isNotNull();
    assertThat(savedUser.getEmail()).isEqualTo(userInfo.getEmail());
    assertThat(savedUser.getStatus()).isEqualTo(Status.ACTIVE);
}

작동 방식

  1. 이메일로 저장된 사용자를 조회
  2. 사용자가 데이터베이스에 존재하는지 확인
  3. 저장된 사용자의 이메일이 원래 사용자의 이메일과 일치하는지 확인
  4. 저장된 사용자의 상태가 ACTIVE인지 확인

 

사용자 조회 테스트

이메일을 통해 사용자를 정확히 조회할 수 있는지 테스트

@Test
@DisplayName("이메일로 사용자 조회 테스트")
void findByEmail() {
    UserEntity findUser = userRepository.findByEmail(user.getEmail()).orElse(null);

    assertThat(findUser).isNotNull();
    assertThat(findUser.getEmail()).isEqualTo(user.getEmail());
}

작동 방식

  1. 이메일로 사용자를 조회
  2. 사용자가 데이터베이스에 존재하는지 확인
  3. 조회된 사용자의 이메일이 원래 사용자의 이메일과 일치하는지 확인

 

닉네임으로 사용자 조회 테스트

@Test
@DisplayName("닉네임으로 사용자 조회 테스트")
void findByNickname() {
    UserEntity findUser = userRepository.findByNickname(user.getNickname()).orElse(null);

    assertThat(findUser).isNotNull();
    assertThat(findUser.getNickname()).isEqualTo(user.getNickname());
}

작동 방식

  1. 닉네임으로 사용자를 조회
  2. 사용자가 데이터베이스에 존재하는지 확인
  3. 조회된 사용자의 닉네임이 원래 사용자의 닉네임과 일치하는지 확인

 

이런식으로 테스트 코드를 짜면 된다 ! 코드를 돌려보면 아래와 같은 녹색 체크가 뜨면 성공 ~

반응형
profile

Peony의 기록 창고 🌼

@myeongju