Spring Boot: автоматически настроенные Data JPA тесты
Вы можете использовать аннотацию @DataJpaTest для тестирования приложений JPA. По умолчанию он ищет классы @Entity и настраивает репозитории Spring Data JPA. Если на пути к классам доступна встроенная база данных, она также настраивает ее. Обычные компоненты @Component не загружаются в ApplicationContext.
По умолчанию Data JPA тесты являются транзакционными и откатываются в конце каждого теста. Если это не то, что вы хотите, вы можете отключить управление транзакциями для теста или для всего класса следующим образом:
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
@DataJpaTest
@Transactional(propagation = Propagation.NOT_SUPPORTED)
class ExampleNonTransactionalTests {
}
Data JPA тесты могут также внедрить bean-компонент TestEntityManager, который предоставляет альтернативу стандартному JPA EntityManager, который специально разработан для тестов. Если вы хотите использовать TestEntityManager вне экземпляров @DataJpaTest, вы также можете использовать аннотацию @AutoConfigureTestEntityManager. JdbcTemplate также доступен, если вам это нужно. В следующем примере показана используемая аннотация @DataJpaTest:
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.autoconfigure.orm.jpa.*;
import static org.assertj.core.api.Assertions.*;
@DataJpaTest
class ExampleRepositoryTests {
@Autowired
private TestEntityManager entityManager;
@Autowired
private UserRepository repository;
@Test
void testExample() throws Exception {
this.entityManager.persist(new User("sboot", "1234"));
User user = this.repository.findByUsername("sboot");
assertThat(user.getUsername()).isEqualTo("sboot");
assertThat(user.getVin()).isEqualTo("1234");
}
}
Встроенные базы данных в памяти, как правило, хорошо подходят для тестов, поскольку они быстрые и не требуют никакой установки. Однако, если вы предпочитаете запускать тесты для реальной базы данных, вы можете использовать аннотацию @AutoConfigureTestDatabase, как показано в следующем примере:
@DataJpaTest
@AutoConfigureTestDatabase(replace=Replace.NONE)
class ExampleRepositoryTests {
// ...
}
Читайте также:
- Spring Boot: автоматически настроенные Spring MVC тесты
- Spring Boot: автоматически настроенные JSON тесты
- Spring Boot: автоматически настроенные тесты
Комментарии
Отправить комментарий