2013-02-18 7 views
0

Я пытаюсь настроить тест junit, который читает pdf-файл для передачи в мой метод, который принимает параметры файла. Проблема, с которой я сталкиваюсь, заключается в том, что я не могу найти файл pdf.читать плоский файл из теста junit

Мне нужно это, чтобы работать как внутри затмения как один тест, так и после того, как тест был заархивирован в файл 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"); 
    } 
} 

В реальном использовании кодогенератора

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"); 
+0

Вы решаете неправильную проблему, хотя я ценю информацию. Все, что мне нужно сделать, это создать файл. Я просто не могу получить файл без жесткого кодирования абсолютного пути, который будет ломаться на нашем тестовом сервере и на других рабочих станциях. – Thom

0

Попробуйте с ниже код , сохраняя test.pdf на th e root. И Java Mails Service API поддерживает добавление вложения как InputStream/InputStreamSource.

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

Вы можете включить файл (postcard.pdf) в classpath--, добавив в банку и добавить его в путь к классам. Затем загрузите файл с помощью getAsResourceStream и напишите stream to a temporary file.

Смежные вопросы