[英]Override application.properties for integration tests in spring-boot app
[英]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.