Java 如何将字符串从文本文件传递到JUnit代码中?
我有以下文件,其中包含Java 如何将字符串从文本文件传递到JUnit代码中?,java,eclipse,Java,Eclipse,我有以下文件,其中包含.MSG文件的二进制表示形式: binaryMessage.txt 我把它放在我的Eclipse工作区中,在下面的文件夹-src/main/resources/test: 我想在以下JUnit代码中使用此文本文件中的字符串,因此我尝试了以下方法: request.setContent("src/main/resources/test/binaryMessage"); mockMvc.perform(post(EmailController.PATH__ME
.MSG
文件的二进制表示形式:
binaryMessage.txt
我把它放在我的Eclipse工作区中,在下面的文件夹-src/main/resources/test
:
我想在以下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代码直接将字符串传递给文件 如果不使用IO代码(或使用IO代码的库),则无法读取文件。也就是说,将文件读入内存并不是那么困难,因此您可以发送它 要将二进制文件读入
字节[]
中,可以使用以下方法:
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")));
如果不使用IO代码(或使用IO代码的库),则无法读取文件。也就是说,将文件读入内存并不是那么困难,因此您可以发送它 要将二进制文件读入
字节[]
中,可以使用以下方法:
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")));
除了我对Samuel的回答的评论之外,我还注意到您依赖于具体的执行目录。我个人不喜欢这样,通常使用类装入器的函数来查找资源 因此,要独立于工作目录,可以使用
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年!)以来,这就不需要再痛苦了。除了我对Samuel的回答的评论之外,我刚刚注意到您依赖于具体的执行目录。我个人不喜欢这样,通常使用类装入器的函数来查找资源 因此,要独立于工作目录,可以使用
getClass().getResource("/test/binaryMessage")
将其转换为URI和路径,然后使用Files.readAllBytes获取内容:
Path resourcePath = Paths.get(getClass().getResource("/test/binaryMessage").toURI());
byte[] content = Files.readAllBytes(resourcePath);
。。。甚至可以将其转换为一个表达式
但是回到你最初的问题:不,这是I/O代码,你需要它。但是自从Java7诞生(2011年!)以来,这就不需要再痛苦了