티스토리 뷰
JPA 애플리케이션을 테스트 하기 위해서 @DataJpaTest를 사용할 수 있습니다.
@Component 빈들은 ApplicationContext에 로그되지 않고 @Entity, JPA repositories만 구성됩니다.
UserRepositoryTest
@RunWith(SpringRunner.class)
@DataJpaTest
@TestPropertySource(locations = "classpath:application.properties")
public class UserRepositoryTest {
@Autowired
private UserRepository userRepository;
@Test
public void findByUsername() {
String username = "papa";
User user = this.userRepository.findByUsername(username);
assertNotNull(user);
assertEquals(user.getUsername(), username);
}
}
application.properties
spring.datasource.url=jdbc:h2:mem:myDb;DB_CLOSE_DELAY=-1
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.H2Dialect
spring.jpa.properties.hibernate.hbm2ddl.auto=create
기본적으로 In-memory embedded database이어서 실제 database를 사용하고 싶다면 다음과 같이 설정한다.
@RunWith(SpringRunner.class)
@DataJpaTest
@TestPropertySource(locations = "classpath:application.properties")
@AutoConfigureTestDatabase(replace= AutoConfigureTestDatabase.Replace.NONE)
public class UserRepositoryTest {
테이블 스키마는 schema.sql에 넣고 초기 데이터는 data.sql에 입력합니다.
spring.datasource.platform 설정을 통해 hsqldb, h2, oracle, mysql, postgresql 등 여러 database 를 설정할 수 있습니다.
schema-${platform}.sql, data-${platform}.sql 형식을 지원합니다.
ex) schema-h2.sql, data-h2.sql, schema-mysql.sql, data-mysql.sql
참고
https://docs.spring.io/spring-boot/docs/current/reference/html/howto-database-initialization.html