2017-04-25 29 views
0

我有以下的文件,其中包含一個.MSG文件的二進制表示:如何將字符串從文本文件傳入我的JUnit代碼?

binaryMessage.txt

,我把它放在我的Eclipse工作區,在以下文件夾 - src/main/resources/test

enter image description here

我想在下面的JUnit代碼中使用這個文本文件中的字符串,所以我嘗試了以下方法:

request.setContent("src/main/resources/test/binaryMessage"); 
    mockMvc.perform(post(EmailController.PATH__METADATA_EXTRACTION_OPERATION) 
      .contentType(MediaType.APPLICATION_JSON) 
      .content(json(request))) 
      .andExpect(status().is2xxSuccessful()); 
} 

但這不起作用。有沒有一種方法可以直接傳遞字符串文件而不使用IO代碼?

回答

1

如果不使用IO代碼(或使用IO代碼的庫),則無法讀取文件。也就是說,把文件讀入內存並不難,所以你可以發送它。

要讀取二進制文件到一個byte[]您可以使用此方法:

private byte[] readToByteArray(InputStream is) throws IOException { 
    try { 
     ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
     byte[] buffer = new byte[1024]; 
     int len; 
     while ((len = in.read(buffer)) != -1) { 
      baos.write(buffer, 0, len); 
     } 
     return baos.toByteArray(); 
    } finally { 
     if (is != null) { 
      is.close(); 
     } 
    } 
} 

然後,你可以做

request.setContent(readToByteArray(getClass().getResourceAsStream("test/binaryMessage"))); 
+0

在2017年,我寧願使用Files.readAllBytes(Path)來代替... – mtj

1

除了我對薩穆埃爾的答案評論,我只注意到你取決於具體的執行目錄。我個人不喜歡那樣,通常使用類加載器的函數來查找資源。

因此,能夠獨立工作目錄,你可以使用

getClass().getResource("/test/binaryMessage") 

將它轉換爲URI和路徑,然後使用Files.readAllBytes來獲取內容:

Path resourcePath = Paths.get(getClass().getResource("/test/binaryMessage").toURI()); 
byte[] content = Files.readAllBytes(resourcePath); 

..甚至將其轉換爲單個表達式。

但回到你原來的問題:不,這是I/O代碼,你需要它。但是從Java 7開始(2011年!)開始,這不需要再痛苦了。

相關問題