JUnit5를 통하여 테스트 코드를 작성하는 과정에서 발생한 오류입니다.
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase;
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
import org.springframework.test.context.junit.jupiter.SpringExtension;
@DataJpaTest
@ExtendWith(SpringExtension.class)
public class BookRepositoryTest {
@Autowired
private BookRepository bookRepository;
@Test
public void saveTest() {
System.out.println("test Implement");
}
}
해당 코드를 통하여 테스트를 수행하였으나, ApplicationContext 오류로 인하여 테스트가 정상적으로 수행되지 않았습니다.
구글링을 통하여 여러 해결 방법에 대하여 알아보았으나, @WebAppConfiguration 어노테이션은 JUnit4에서 지원하는 해결 방안이고, 일반 application도 정상적으로 동작하였기 때문에 원인을 찾는 데에 많은 시간이 걸렸습니다.
결과적으로는 오류 원인을 찾을 수 있었는데, 이는 바로 @DataJpaTest 어노테이션으로 인하여 발생한 오류였습니다.
@DataJpaTest 어노테이션을 사용할 경우, 내장된 메모리 데이터 베이스를 통하여 테스트를 수행하게 됩니다. 하지만 저의 경우에는 MySQL 데이터 베이스를 사용하였기 때문에, 여기서 충돌이 발생하였던 것입니다.
데이터 베이스를 H2로 변경하여 오류를 해결하였다는 사람들도 있었는데, 바로 @DataJpaTest 어노테이션으로 인하여 그랬던 것 같습니다.
그런데 저는 H2보다는 MySQL을 더 좋아하기때문에, MySQL을 그대로 사용하려고합니다.
이 경우, AutoConfigureTestDataBase 어노테이션을 통하여 테스트 시에 사용할 데이터 베이스를 지정해 줄 수 있습니다.
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase;
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
import org.springframework.test.context.junit.jupiter.SpringExtension;
@DataJpaTest
@ExtendWith(SpringExtension.class)
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
public class BookRepositoryTest {
@Autowired
private BookRepository bookRepository;
@Test
public void saveTest() {
System.out.println("test Implement");
}
}
다음처럼 코드를 수정한 뒤, 테스트 코드가 정상적으로 동작하는 것을 확인할 수 있습니다.
Reference