0

我正在尝试设置一个 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

4 回答 4

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");
    }
}

在真实代码中使用

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");
于 2013-02-18T16:31:23.537 回答
0

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

InputStream configStream = getClass().getResourceAsStream("test.pdf");
于 2013-02-18T16:56:10.683 回答
0

您可以将文件(postcard.pdf)包含在类路径中——通过添加到 jar 并将其添加到类路径中。然后使用getAsResourceStream获取文件并将流写入临时文件

于 2013-02-18T16:59:50.740 回答
0

我最终只是编写了一个相对路径。谢谢您的帮助。

于 2013-02-22T17:12:00.207 回答