Как протестировать LocalContainerEntityManagerFactoryBean с помощью Spock

#java #spring #spock

#java #spring #spock

Вопрос:

Как я могу протестировать свое соединение с БД с помощью spock? Я знаю, как это сделать, используя JUnit и тестовый проход, но когда я пытаюсь сделать то же самое, используя Spock , я получаю NullPointerException и не могу вызвать метод getDataSource() для нулевого объекта.

 @SpringBootTest
@ContextConfiguration(classes = DatabaseConfig.class)
@WebAppConfiguration
class DatabaseConfigTest extends Specification {

    @Autowired
    LocalContainerEntityManagerFactoryBean entityManagerFactoryBean;

    def "Should connect to database."() {
        when:
        entityManagerFactoryBean.getDataSource().getConnection()
        then:
        notThrown(SQLException.class)
    }
}
  

Как протестировать соединение с БД с помощью Spock, мой класс, отвечающий за конфигурацию базы данных, DatabaseConfig.class

Комментарии:

1. Вы добавили spock-spring зависимость? Вам не нужны другие аннотации, кроме @SpringBootTest .

Ответ №1:

Это должно дать вам то, что вы ищете. Удалите аннотации ContextConfiguration и WebAppConiguration. Ввод источника данных напрямую.

 @SpringBootTest
class DatabaseConfigTest extends Specification {

    @Autowired
    DataSource dataSource;

    def "Should connect to database."() {
        when:
        dataSource.getConnection()
        then:
        notThrown(SQLException.class)
    }
}
  

Комментарии:

1. Я не хочу тестировать метод источника данных, я хочу протестировать LocalContainerEntityManager, который содержит всю информацию об источнике данных и jpaProperties.