Многоуровневое модульное тестирование на основе схемы Hibernate - PullRequest
0 голосов
/ 14 января 2019

Я реализовал многопользовательский режим Hibernate на основе схемы, реализовав MultiTenantConnectionProvider интерфейс. Не вдаваясь в подробности, моя реализация getConnection выбирает схему, например:

USE tanant_name

Пока все хорошо, это работает. В качестве следующего шага я хочу провести модульное тестирование этого материала. Я использовал SpringBoot и базу данных H2 в памяти для тестирования.

Синтаксис H2 отличается от MySQL. Во H2, используя схему, сделанную:

SET SCHEMA tanant_name

Я пытался установить режим совместимости с MYSQL, например:

SET MODE MySQL

Это, похоже, не имеет никакого эффекта, возможно, из-за ограничений совместимости с MYSQL (точно не знаю).

Есть ли другие варианты для модульного тестирования моей конфигурации Hibernate?

Кстати: многопользовательская конфигурация - это конфигурация Java, и она автоматически внедряется Spring во время начальной загрузки приложения. Это выглядит следующим образом:

@Configuration
public class HibernateMultitenancyConfig {

    @Autowired
    private JpaProperties jpaProperties;

    @Bean
    public JpaVendorAdapter jpaVendorAdapter() {
        return new HibernateJpaVendorAdapter();
    }

    @Bean
    public LocalContainerEntityManagerFactoryBean entityManagerFactory(DataSource dataSource,
                                                                       MultiTenantConnectionProvider multiTenantConnectionProviderImpl,
                                                                       CurrentTenantIdentifierResolver currentTenantIdentifierResolverImpl) {
        Map<String, Object> properties = new HashMap<>();
        properties.putAll(jpaProperties.getProperties());
        properties.put(Environment.MULTI_TENANT, MultiTenancyStrategy.SCHEMA);
        properties.put(Environment.MULTI_TENANT_CONNECTION_PROVIDER, multiTenantConnectionProviderImpl);
        properties.put(Environment.MULTI_TENANT_IDENTIFIER_RESOLVER, currentTenantIdentifierResolverImpl);
        LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
        em.setDataSource(dataSource);
        em.setPackagesToScan("com.my.package");
        em.setJpaVendorAdapter(jpaVendorAdapter());
        em.setJpaPropertyMap(properties);
        return em;
    }
}
...