2017-02-25 69 views
1

我正在使用Spring Boot開發Web應用程序,現在我正在嘗試爲DAO圖層創建測試,並且我想使用不同的配置,它將讀取自定義屬性文件的標準之一。但Iam遇到問題,它總是讀取默認應用程序。和hibernate.properties。
想要這樣做,以便具有不同的hibernate.ddl-auto屬性進行測試。但是當我運行測試時,我看到Spring從屬於資源文件夾的hibernate.properties中讀取屬性(我故意在該文件中創建一個錯字,以便在Spring讀取時獲取異常)。但是,即使當我使用@TestPropertySource時,爲什麼它會讀取該文件?
我看到有些東西我不知道,但是什麼? 包的src /測試/ JAVA/com.guard/DAO使用單獨的application.properties創建Spring Boot測試

@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); 
     } 
    } 
}` 

測試配置類是設置上下文 包的src /測試/ 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"); 

    } 
} 

所需應用程序測試。性能和hibernate-test.properties是SRC /測試/ 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 

`

回答

3

創建測試目錄中新的資源目錄,並把你的測試屬性文件存在。同時將屬性文件重命名爲application.properties和hibernate.properties

Spring測試將從test/resources /目錄獲取屬性。並且在此方法中,您不需要@TestPropertySource

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 { 
... 
} 
相關問題