簡體   English   中英

Spring Boot集成測試無法訪問application.properties文件

[英]Spring Boot integration tests cannot reach application.properties file

我有一些用@RestController注釋的類,我正在嘗試使用MockMvc類進行測試。 端點可以從Web應用程序正確響應,但是運行測試時(從IntelliJ IDEA)出現以下錯誤:

java.lang.IllegalArgumentException: Could not resolve placeholder
'spring.data.rest.base-path' in string value "${spring.data.rest.base-path}/whatever"

這是application.properties文件的樣子:

spring.data.rest.base-path=/api
spring.profiles.active=dev
...

我還有一個名為application-dev.properties的文件,帶有其他(不同的)屬性。

這是測試類的注釋方式:

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Application.class)
@WebIntegrationTest // Also tried: @WebAppConfiguration
@ActiveProfiles("dev")
// Also tried: @PropertySource("classpath:application.properties")
// Also tried: @TestPropertySource("classpath:application.properties")
public class MyRestControllerTest {
    ...
}

另一方面,這是REST控制器的實現方式(正在使用有問題的屬性):

@RestController
@RequestMapping("${spring.data.rest.base-path}/whatever")
public class MyRestController {
    ...
}

應用程序的主類如下所示:

@SpringBootApplication(scanBasePackages = {...})
@EnableJpaRepositories({...})
@EntityScan({...})
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

最后,這是項目結構的(子集):

my-project
|_ src
   |_ java
   |  |_ com.example.x
   |     |_ controller
   |        |_ MyRestController.java
   |
   |_ test
   |  |_ com.example.x
   |     |_ controller
   |        |_ MyRestControllerTest.java
   |
   |_ resources
      |_ application.properties
      |_ application-dev.properties

我在整個網絡上找到了解決該問題的幾種解決方案,但是似乎沒有一種對我有用。

答案最終與Spring批注或IntelliJ配置MockMvc ,而是與MockMvc ,特別是與在測試的setUp上使用的類和方法MockMvcBuilders.standaloneSetup有關。 這將不會使用應用程序的上下文,因此將無法正確讀取依賴於它的屬性。

將其更改為MockMvcBuilders.webAppContextSetup ,(從文檔)

使用給定的,完全初始化(即,刷新)的WebApplicationContext構建MockMvc實例。

一切正常。 對於集成測試,使用它更有意義,不是嗎?

感謝您的時間和精力。 抱歉,沒有顯示所提到的setUp方法,但我沒有想到可能是該問題引起的。

您的application.properties不得位於測試類路徑中。 您應該在IntelliJ中為您的項目定義一個“測試資源”位置,並在那里創建一個application.properties文件。

順便說一句,我發現擁有一個單獨的測試屬性文件很有用,因為測試屬性通常與正常的運行時環境不同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM