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 {

    // ...

}


Читайте также:


Комментарии

Популярные сообщения из этого блога

Методы класса Object в Java

Как получить текущий timestamp в Java

Основные опции JVM для повышения производительности и отладки