我正在尝试设置一个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");
请帮帮忙?
答案 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)
我最终只编写了相对路径。谢谢你的帮助。