Spring Boot 테스트 어노테이션 비교: @DataJpaTest vs @SpringBootTest

greenTea·2023년 11월 26일
0

🌟 Spring Boot 테스트 어노테이션 비교: @DataJpaTest vs @SpringBootTest 🌟

Spring Boot는 효과적인 테스트를 위한 다양한 유틸리티와 어노테이션을 제공합니다. 그 중 @DataJpaTest@SpringBootTest는 각각 데이터 액세스 계층과 전체 애플리케이션 컨텍스트의 테스트에 중점을 둡니다.

@DataJpaTest 📚

  • 목적: JPA 관련 구성 요소에 초점을 맞춘 데이터 액세스 계층 테스트
  • 특징:
    • @Repository 어노테이션을 가진 빈들을 자동 스캔
    • 빠른 테스트 실행 속도

@SpringBootTest 🌍

  • 목적: 전체 스프링 부트 애플리케이션 컨텍스트 로드
  • 특징:
    • @Controller, @Service, @Repository 등 모든 빈 로드
    • 실제 애플리케이션 환경과 유사한 테스트 환경 제공

🧪 예제 코드

MyUser 엔터티

@NoArgsConstructor
@Data
@Entity
public class MyUser {
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Id
    private Long id;

    private String name;

    public MyUser(String name) {
        this.name = name;
    }
}

Service Layer

@RequiredArgsConstructor
@Service
public class MyService {

    private final MyRepository myRepository;

    public void saveData(String name) {
        myRepository.save(new MyUser(name));
    }
}

Repository Layer

@Repository
public interface MyRepository extends JpaRepository<MyUser,Long> {
}

🧐 테스트 비교

@SpringBootTest 사용 예시

@SpringBootTest를 사용하여 MyService의 전체 동작을 테스트합니다. 모든 빈이 등록되므로 필요한 컴포넌트를 자유롭게 주입받아 사용할 수 있습니다.

@SpringBootTest
class MyServiceTest {

	@Autowired
	private MyRepository repository;

	@Autowired
	private MyService service;

	@Test
	void t1() {
	
	}

}
//성공!!

정상동작 하는 것을 확인 할 수 있습니다.

@DataJpaTest 사용 예시

@DataJpaTest를 사용하면 MyRepository와 같은 JPA 관련 구성 요소만 테스트에 포함됩니다.

@DataJpaTest
class MyRepositoryTest {
    @Autowired
	private MyRepository repository;

	@Autowired
	private MyService service;

	@Test
	void t1() {

	}
}

//실패!!

org.springframework.beans.factory.UnsatisfiedDependencyException이 발생!!! (expected at least 1 bean which qualifies as autowire candidate)😰

@DataJpaTestRepsitory만을 올리기에 Service는 없다고 나오는 것이 정상입니다.

private MyService service를 없애고 다시 실행한다면 초록 불을 보실 수 있습니다.

🌈 결론

@DataJpaTest@SpringBootTest는 각각의 목적에 맞게 사용되어야 합니다. 데이터 액세스 레이어에 집중하는 경우 @DataJpaTest를, 애플리케이션의 전체적인 통합 테스트를 원할 때는 @SpringBootTest를 선택해야 합니다.
상황에 알맞게 선택하여 사용한다면 더욱 효과적인 테스트를 작성 할 수 있습니다.

profile
greenTea입니다.

0개의 댓글