2017-04-15 139 views
1

我試圖讀取類路徑這樣的文件在我的單元測試:春天開機:如何讀取classpath中的資源在單元測試

@Value("classpath:state.json") 
Resource stateFile; 

state.json文件src/test/resources目錄。 當我嘗試使用stateFile.getInputStream()讀取此文件時,它不返回任何內容。我究竟做錯了什麼?

我的測試類註釋這樣

@RunWith(SpringRunner.class) 
@SpringBootTest 

我可以看到,如果我試圖用不正確的文件,代碼失敗。所以我認爲它在classpath中看到該文件,但由於某種原因沒有閱讀內容。

回答

0

我剛碰到這個。我正在使用Maven。我看了一眼我的target/test-classes文件夾,我的資源文件不在那裏(儘管它在我的src/test/resources文件夾中)。

我跑mvn clean install然後重新檢查我的目標/測試類文件夾和資源文件現在在那裏。在那之後,我的測試能夠找到文件並且測試工作。

因此,似乎您的資源不會被複制,直到您執行mvn clean。 JUnit正在尋找由maven構建的類路徑,直到文件實際上將其放入目標/測試類文件夾中,JUnit將無法找到它。

1

您不能訪問@Value資源,除非它的屬性被定義。 它應該是這樣。

@Value("${stateJsonPath}") 
Resource stateFile; 

如果您必須從硬編碼路徑獲取資源,請使用此方法。

Resource stateFile = new ClassPathResource("state.json");