如何将字符串中的字符串传递到我的JUnit代码中?

时间:2017-04-25 03:29:36

标签: java eclipse

我有以下文件,其中包含.MSG文件的二进制表示形式:

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代码?

2 个答案:

答案 0 :(得分: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")));

答案 1 :(得分:1)

除了我对Samuel的答案的评论之外,我只是注意到你依赖于具体的执行目录。我个人不喜欢这样,通常使用类加载器的函数来查找资源。

因此,要独立于您的工作目录,您可以使用

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

将其转换为URI和Path,然后使用Files.readAllBytes获取内容:

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

...甚至将其转换为单个表达式。

但回到原来的问题:不,这是I / O代码,你需要它。但是自从Java 7(2011年!)出现以来,这不再需要痛苦了。