从junit test读取平面文件

时间:2013-02-18 16:19:58

标签: java file junit

我正在尝试设置一个junit测试,它读取一个pdf文件以传递给我的方法,该方法接受一个File参数。我遇到的问题是我似乎无法找到pdf文件。

我需要这个在eclipse内部作为单个测试工作,并且一旦测试被压缩到一个jar文件中进行自动构建。

为简单起见,我将postcard.pdf放在junit测试类的旁边。这是我尝试过的最后一件事。

URL url = getClass().getClassLoader().getResource("postcard.pdf");
URI uri = url.toURI();
File file = new File(uri);
javamailService.sendMessage(MAILUSER, REPLY_TO, SUBJECT, file, MimeType.pdf);
fail("Not yet implemented");

请帮帮忙?

4 个答案:

答案 0 :(得分:1)

通常我只需更改路径以使其适用于测试数据:

File file = new File("./testdata/pdftest/test.pdf");

但如果你的情况不起作用,那么通过定义IFileProvider接口“模拟”文件。

public interface IFileProvider {
  File getFile(URI uri);
}
在junit测试中

使用

class DummyPdfFileProvider implements IFileProvider {
    File getFile(URI uri) {
       // ignore uri
       return new File("./testdata/test.pdf");
    }
}

在Real code中使用

class PdfFileProvider implements IFileProvider {
    File getFile(URI uri) {
       // ignore uri
       return new File(uri);
    }
}

立即更改实际代码以使用PdfFileProvider

IFileProvider fileProvider = new PdfFileProvider();

URL url = getClass().getClassLoader().getResource("postcard.pdf");
URI uri = url.toURI();
File file = fileProvider.getFile(uri);
javamailService.sendMessage(MAILUSER, REPLY_TO, SUBJECT, file, MimeType.pdf);
// and remove the fail below:
//fail("Not yet implemented");

答案 1 :(得分:0)

尝试使用以下代码,将test.pdf保留在根级别。 Java Mails Service API支持将附件添加为InputStream / InputStreamSource。

InputStream configStream = getClass().getResourceAsStream("test.pdf");

答案 2 :(得分:0)

您可以在classpath中包含文件(postcard.pdf),方法是添加到jar并将其添加到classpath。然后使用getAsResourceStream获取文件并编写stream to a temporary file

答案 3 :(得分:0)

我最终只编写了相对路径。谢谢你的帮助。