簡體   English   中英

Java:在單元測試中模擬多部分文件

[英]Java: mock multipartfile in unit test

我正在嘗試模擬 MultipartFile,我想使用我在測試中創建的 stream 創建模擬

我也嘗試過沒有太多運氣的文件。 這是我到目前為止嘗試過的

FileInputStream stream = new 
FileInputStream("MOCK_file.xlsm");
MultipartFile f1 = new MockMultipartFile("file1",stream);
MultipartFile[] files = {f1};
return files;

我得到一個 fileNotFoundException。 我應該將我的文件放在我的 Maven 項目中的什么位置,以便單元測試可以找到該文件?

- 或者 -

如何在不使用文件的情況下在代碼中創建 stream?

如何在不使用文件的情況下在代碼中創建 stream?

您可以使用ByteArrayInputStream注入模擬數據。 對於少量數據來說非常簡單:

byte[] data = new byte[] {1, 2, 3, 4};
InputStream stream = new ByteArrayInputStream(data);

否則,您需要弄清楚您的代碼是從哪個目錄運行的,這取決於它的運行方式。 為了幫助解決這個問題,您可以打印user.dir系統屬性,它會告訴您當前目錄:

System.out.println(System.getProperty("user.dir"));

或者,您可以使用完整路徑而不是相對路徑來查找文件。

把文件放進去

src/test/resources/MOCK_file.xlsm

從 JUnit class 讀取:

InputStream resourceAsStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("MOCK_file.xlsm");

更好的是,您可以只模擬MultipartFile ,而您根本不需要InputStream

為此,您只需要做mock(MultiPartFile.class)然后定義每個 function 將做什么

例如,如果您使用名稱

final MultipartFile mockFile = mock(MultipartFile.class);
when(mockFile.getOriginalFilename()).thenReturn("CoolName");

這樣,您將不必為實際文件而煩惱,也不必為意外響應而煩惱,因為您將定義它們

暫無
暫無

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

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