Весенний тест DBUnit H2Connection отказался

Я хотел бы создать интеграционный тест для своего проекта, и я новичок в Spring Test DB Unit. К сожалению, после запуска теста я сталкиваюсь с ошибкой, приведенной ниже:

Ошибка: соединение отказано: подключить локальный хост

Я также добавил файл класса базовых тестовых конфигураций, в котором указаны конфигурации и способы подключения к базе данных H2.

//import classes

    @Configuration
    @ComponentScan( {"com.projects.person", "com.projects.commons"} )
    @EnableWebMvc
    @EnableTransactionManagement
    @PropertySource( "classpath:application.properties" )
    public class BaseTestConfig extends WebMvcConfigurerAdapter
    {

        @Autowired
        private Environment env;

        @Autowired
        private OperatingSystem operatingSystem;

        @Autowired
        private PropertiesFactory propertiesFactory;

        @Bean
        public UrlBasedViewResolver setupViewResolver()
        {
            UrlBasedViewResolver resolver = new UrlBasedViewResolver();
            resolver.setPrefix( "/WEB-INF/pages/" );
            resolver.setSuffix( ".jsp" );
            resolver.setViewClass( JstlView.class );
            return resolver;
        }

        @Bean
        public LocalSessionFactoryBean sessionFactory() {
            LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
            sessionFactory.setDataSource(dataSource());
            sessionFactory.setPackagesToScan( "com.projects.person.model.db" );
            sessionFactory.setHibernateProperties(hibernateProperties());
            return sessionFactory;
        }

        @Bean
        public DataSource dataSource() {

            String databaseUrl = "jdbc:h2:tcp://localhost/persondb";
            if( operatingSystem.isWindows() )
            {
                databaseUrl = "jdbc:h2:tcp://localhost/~/persondb";
            }

            DriverManagerDataSource dataSource = new DriverManagerDataSource();
            dataSource.setDriverClassName("org.h2.Driver");
            dataSource.setUrl( databaseUrl );
            dataSource.setUsername("sa");
            dataSource.setPassword("");
            return dataSource;
        }

        @Bean
        public H2Connection dbUnitConnection() throws SQLException, DatabaseUnitException {
            return new H2Connection(dataSource().getConnection(), "Person");
        }

        private Properties hibernateProperties() {
            Properties properties = new Properties();
            properties.put("hibernate.dialect", "org.hibernate.dialect.H2Dialect");
            properties.put("hibernate.show_sql", "false");
            return properties;
        }

        @Bean
        public HibernateTransactionManager transactionManager(SessionFactory s) {
            HibernateTransactionManager transactionManager = propertiesFactory.createTransactionManagerProperty();
            transactionManager.setSessionFactory(sessionFactory().getObject());
            return transactionManager;
        }
    }

1 ответ

В соединении отказано, потому что databaseUrl вы указываете требует сервер, который уже работает и прослушивает порт TCP на localhost,

Итак, у вас есть два варианта.

  1. Убедитесь, что у вас есть такая база данных H2, работающая на localhost,
  2. Вместо этого используйте встроенную базу данных H2, как в следующем примере.
@Bean
public DataSource dataSource() {
    return new EmbeddedDatabaseBuilder()
        .generateUniqueName(true)
        .setType(H2)
        .build();
}
Другие вопросы по тегам