簡體   English   中英

Spring boot:如何在單元測試中從類路徑讀取資源

[英]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.

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