[英]Spring boot: How to read resource from classpath in unit test
我試圖在我的單元測試中從類路徑中讀取一個文件:
@Value("classpath:state.json")
Resource stateFile;
我在src/test/resources
目錄中有state.json
文件。 當我嘗試使用stateFile.getInputStream()
讀取此文件時,它不返回任何內容。 我究竟做錯了什么?
我的測試類是這樣注釋的
@RunWith(SpringRunner.class)
@SpringBootTest
如果我嘗試使用不正確的文件,我可以看到代碼失敗。 所以我認為它在類路徑中看到了文件,但由於某種原因沒有讀取內容。
我剛遇到這個。 我正在使用 Maven。 我查看了我的 target/test-classes 文件夾,我的資源文件不在那里(即使它在我的 src/test/resources 文件夾中)。
我運行了mvn clean install
然后重新檢查了我的目標/測試類文件夾,資源文件現在就在那里。 之后,我的測試能夠找到該文件並且測試成功了。
因此,在您執行mvn clean
之前,您的資源似乎不會被復制。 JUnit 正在查找 maven 構建的類路徑,直到該文件真正進入 target/test-classes 文件夾,JUnit 才能找到它。
除非定義了屬性,否則您無法訪問 @Value 資源。 應該是這樣。
@Value("${stateJsonPath}")
Resource stateFile;
如果您必須從硬編碼路徑獲取資源,請使用這種方式。
Resource stateFile = new ClassPathResource("state.json");
這應該很簡單,注意路徑以點開頭,表示當前目錄;
@Test
public void testFile() {
String path = "./src/test/resources";
String fileName = "test.zip";
File file = new File(path, fileName);
assertTrue(file.exists());
}
我正在嘗試在單元測試中從classpath讀取文件:
@Value("classpath:state.json")
Resource stateFile;
我在src/test/resources
目錄中有state.json
文件。 當我嘗試使用stateFile.getInputStream()
讀取此文件時,它不返回任何內容。 我究竟做錯了什么?
我的測試課是這樣注釋的
@RunWith(SpringRunner.class)
@SpringBootTest
如果我嘗試使用不正確的文件,我可以看到代碼失敗。 因此,我認為它在類路徑中看到文件,但由於某種原因未讀取內容。
為后代分享工作解決方案。 可以使用org.springframework.core.io.ResourceLoader
讀取類路徑中存在的文件。 例如,我在src/test/java/resources/data
目錄下有一個名為posts.json
的示例數據文件,我必須在測試用例執行期間作為@Before
一部分加載它
@ActiveProfiles("test")
@ExtendWith(SpringExtension.class)
@SpringBootTest(classes = Application.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class SampleTest {
@Autowired
private ResourceLoader resourceLoader = null;
@BeforeEach
void init() {
File dataFile = resourceLoader.getResource("classpath:data/posts.json").getFile();
...
...
}
}
注意:當您使用分類器classpath:
路徑時,該文件應出現在類classpath:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.