весенний тест загрузки файла application.properties не найден - PullRequest
1 голос
/ 27 июня 2019

У меня есть модуль maven с одним тестовым классом DbTest . При запуске теста файл свойств application.properties не берется. Линия System.out.println in DvsTestDbConfig отображает {database.test} вместо qqqqqqqqq (фиктивное значение на данный момент). Есть идеи, почему spring не находит файл свойств?

Projectstructure

DBTEST

package ch.admin.estv.dvs.test.database;

import ch.admin.estv.dvs.test.database.config.DvsTestDbConfig;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.context.annotation.Import;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

@RunWith(SpringJUnit4ClassRunner.class)
@Import(DvsTestDbConfig.class)
public class DbTest {

    @Test
    public void givenPartnerToDelete_whenPartnerDelete_thenNoEntryExist() {

        System.out.println("test started");
    }
}   

DvsTestDbConfig

package ch.admin.estv.dvs.test.database.config;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.JpaVendorAdapter;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;

import javax.persistence.EntityManagerFactory;
import javax.sql.DataSource;
import java.util.Properties;

@Configuration
@ComponentScan(basePackages = {"ch.admin.estv.dvs.test.database"})
@EnableTransactionManagement
public class DvsTestDbConfig {


    @Value("${database.test}")
    String databaseTest;

    @Autowired
    private Environment environment;

    @Value("${database.driverClassName}")
    String driverClassName;

    @Value("${database.url}")
    String databaseUrl;

    @Value("${database.username}")
    String databaseUsername;

    @Value("${database.password}")
    String databasePassword;


    @Bean
    public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
        LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
        em.setDataSource(dataSource());
        em.setPackagesToScan(new String[]{"ch.admin.estv.dvs.test.database"});
        JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
        em.setJpaVendorAdapter(vendorAdapter);
        em.setJpaProperties(additionalProperties());

        return em;
    }

    @Bean
    public DataSource dataSource() {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();

        System.out.println("**************  db property databaseTest : " + databaseTest);

        dataSource.setUrl(databaseUrl);
        dataSource.setUsername(databaseUsername);
        dataSource.setPassword(databasePassword);
        dataSource.setDriverClassName("oracle.jdbc.OracleDriver");


        return dataSource;
    }

    @Bean
    public PlatformTransactionManager transactionManager(EntityManagerFactory emf) {
        JpaTransactionManager transactionManager = new JpaTransactionManager();
        transactionManager.setEntityManagerFactory(emf);

        return transactionManager;
    }

    @Bean
    public PersistenceExceptionTranslationPostProcessor exceptionTranslation() {
        return new PersistenceExceptionTranslationPostProcessor();
    }

    Properties additionalProperties() {
        Properties properties = new Properties();
        //properties.setProperty("hibernate.hbm2ddl.auto", "validate");
        properties.setProperty("hibernate.dialect", "org.hibernate.dialect.Oracle10gDialect");

        properties.setProperty("hibernate.temp.use_jdbc_metadata_defaults", "false");
        properties.setProperty("hibernate.jdbc.lob.non_contextual_creation", "true");

        properties.setProperty("show_sql", "true");
        return properties;
    }

}

application.properties

database.test=qqqqqqqqq

database.url=xxxxxxxxxxxxxxxxx
database.username=xxxxxxxxxx
database.password=xxxxxxxxxxx
database.driverClassName=oracle.jdbc.OracleDriver

pom.xml

<parent>
    <artifactId>dvs-test</artifactId>
    <groupId>ch.admin.estv.dvs</groupId>
    <version>1.0-SNAPSHOT</version>
</parent>

<modelVersion>4.0.0</modelVersion>

<artifactId>dvs-test-database</artifactId>
<packaging>jar</packaging>


<dependencies>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-oxm</artifactId>
    </dependency>

    <dependency>
        <groupId>javax.transaction</groupId>
        <artifactId>javax.transaction-api</artifactId>
    </dependency>

    <dependency>
        <groupId>com.oracle</groupId>
        <artifactId>ojdbc6</artifactId>
        <version>${ojdbc6.version}</version>
    </dependency>

</dependencies>

Ответы [ 2 ]

0 голосов
/ 27 июня 2019

Добавить

@PropertySource(value = "classpath:application.properties") 

аннотация в вашем классе DvsTestDbConfig

Свойства, разрешенные с помощью Среды, находятся в одном или нескольких объекты источника свойств и классы @Configuration могут вносить свой вклад источники свойств для объекта Environment с помощью @PropertySource аннотация:

https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/context/annotation/Configuration.html

0 голосов
/ 27 июня 2019

Аннотируйте свой тестовый класс с помощью @SpringBootTest.Более подробная информация и альтернативы: Заполнение Spring @Value во время модульного теста

...