Spring Data Unit Test не может создать экземпляр EntityManagerFactory из-за отсутствия видимых конструкторов - PullRequest
0 голосов
/ 05 февраля 2020

Я хочу протестировать свои весенние репозитории и столкнулся с проблемой, которая, кажется, появляется довольно часто. Но, к сожалению, я не смог найти решение до сих пор.

Когда я запускаю свои модульные тесты, выдается это исключение:

Factory method 'entityManagerFactory' threw exception; nested exception is java.lang.IllegalArgumentException: 
No visible constructors in class org.springframework.boot.test.autoconfigure.jdbc.TestDatabaseAutoConfiguration$EmbeddedDataSourceFactoryBean

Пример для моих тестовых классов выглядит следующим образом:

@RunWith(SpringRunner.class)
@ContextConfiguration(classes= {OracleJPAConfig.class})
@DataJpaTest
public class AlContainmentsRepositoryTest {

  @Autowired
  private TestEntityManager testEm;
  .
  .
  .
}

И класс конфигурации, упомянутый выше, таков:

@Configuration
@PropertySource("classpath:database-${xxxxxx.db.profile}.properties")
@EnableJpaRepositories(entityManagerFactoryRef = "entityManagerFactory",
                        transactionManagerRef = "transactionManager",
                        basePackages = {"de.xxxxxx.xxxxxx.xxxxxx.data.repository"})
@EnableTransactionManagement
public class OracleJPAConfig {

    @Value("${spring.datasource.driver-class-name}")
    protected String driverClassName;
    @Value("${spring.datasource.url}")
    protected String url;
    @Value("${spring.datasource.username}")
    protected String username;
    @Value("${spring.datasource.password}")
    protected String password;

    @Primary
    @SuppressWarnings("unchecked")
    @Bean(name="dataSource")
    public DataSource dataSource() {
        try {
            SimpleDriverDataSource dataSource = new SimpleDriverDataSource();
            Class<? extends Driver> driver = (Class<? extends Driver>) Class.forName("oracle.jdbc.driver.OracleDriver");
            dataSource.setDriverClass(driver);
            dataSource.setUrl(url);
            dataSource.setUsername(username);
            dataSource.setPassword(password);
            return dataSource;
        } catch (ClassNotFoundException e) {
            return null;
        }
    }

    @Primary
    @Bean(name="entityManagerFactory")
    public LocalContainerEntityManagerFactoryBean entityManagerFactory() throws SQLException {
        final LocalContainerEntityManagerFactoryBean emf = new LocalContainerEntityManagerFactoryBean();
        final HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
        Properties hibernateProperties = new Properties();

        hibernateProperties.put("hibernate.dialect", "org.hibernate.dialect.Oracle10gDialect");
        hibernateProperties.put("hibernate.max_fetch_depth", 3);
        hibernateProperties.put("hibernate.jdbc.batch_size", 10);
        hibernateProperties.put("hibernate.jdvc.fetch_size", 50);

        emf.setPackagesToScan("de.xxxxxx.xxxxxx.xxxxxx.data.entity");
        emf.setDataSource(dataSource());
        emf.setJpaVendorAdapter(vendorAdapter);
        emf.setJpaProperties(hibernateProperties);

        return emf;
    }
    .
    .
    .
}

Бины помечаются как первичные, поскольку в приложении есть другой источник данных. Мы работаем с двумя базами данных.

Итак, что я могу сделать, чтобы мои тесты работали? Я не очень понимаю проблему здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...