使用单独的application.properties创建Spring Boot测试

时间:2017-02-25 11:19:37

标签: java spring hibernate spring-boot spring-test

我正在使用Spring Boot开发Web应用程序,现在我正在尝试为DAO层创建测试,并且我想使用不同的配置,这将读取自定义属性文件而不是标准属性文件。但是我遇到了麻烦,它总是读取默认应用程序。和hibernate.properties。
想要做的就是为了拥有不同的hibernate.ddl-auto属性进行测试。但是当我运行测试时,我看到Spring从资源文件夹中的hibernate.properties读取属性(我故意在该文件中输入错误,以便在Spring读取时获得异常)。但即使我使用@TestPropertySource,为什么它会读取该文件?我看到有些东西我不知道,但是什么? package src / test / java / com.guard / dao

@RunWith(SpringRunner.class)
@DataJpaTest
@Rollback

public class LifeguardDaoTest {
    @Autowired
    private LifeguardDao lgDao;

    @Test
    public void selectTest(){
        for (Lifeguard lg :lgDao.getAll()) {
            System.out.println(lg);
        }
    }
}`

测试配置类是设置上下文 package src / test / java / com.guard

@SpringBootApplication
@EntityScan(value = {"com.guard.dao","com.guard.model"})
@TestPropertySource(value = {"classpath:application-test.properties", "classpath:hibernate-test.properties"})
public class TestConfiguration {
    public static void main(String[] args) {
        ApplicationContext ctx = SpringApplication.run(TestConfiguration.class, args);
        String[] beanNames = ctx.getBeanDefinitionNames();
        Arrays.sort(beanNames);
        System.out.println("Spring boot test generated " + beanNames.length + " beans");

    }
}

必需的application-test.properties和hibernate-test.properties在src / test / java路径上 这是项目结构(不知道如何在这里设计,抱歉)

|src
|--main
|----java
|------com.guard
|----------configuration
|-------------GuardApplication.class (@SpringBootApplication,requires default props)
|--test
|----java
|------application-test.properties
|-------hibernate-test.properties
|-----com.guard
|-------TestConfiguration.class
|-------dao
|---------LifeguardDaoTest.class

我的application-test.properties `

spring.jpa.properties.hibernate.use_sql_comments=true

spring.jpa.hibernate.dialect=org.hibernate.dialect.HSQLDialect
spring.jpa.hibernate.show_sql=false
spring.jpa.hibernate.format_sql=true
spring.jpa.hibernate.hbm2ddl-auto=create

# even in case if it won`t use "spring.jpa" prefix
hibernate.dialect=org.hibernate.dialect.HSQLDialect
hibernate.show_sql=true
hibernate.format_sql=true

`

2 个答案:

答案 0 :(得分:3)

在test目录中创建新的资源目录,并将测试属性文件放在那里。还要将属性文件重命名为application.properties和hibernate.properties

Spring测试将从test / resources /目录中获取属性。在这种方法中,您不需要@TestPropertySource

答案 1 :(得分:0)

通常,@ TestPropertySource与@ContextConfiguration一起使用。

尝试使用此配置类。

@Configuration
@ComponentScan
@Profile("test")
public class TestConfiguration {

}

注释:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@ContextConfiguration(classes = TestConfiguration.class)
@ActiveProfiles("test")
@TestPropertySource(locations="classpath:application-test.properties")
public @interface IntegrationTest { }

然后你就像这样写测试:

@RunWith(SpringJUnit4ClassRunner.class)
@IntegrationTest
public class SomeDaoTest {
...
}