2013-02-18 58 views
0

我正在嘗試設置一個junit測試,讀取一個pdf文件以傳入我的方法,該方法需要一個File參數。我遇到的問題是我似乎無法找到PDF文件。從junit測試中讀取平面文件

我需要這個在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"); 
    } 
} 

在實際的代碼使用現在

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 2013-02-18 16:35:19

0

與下面的代碼試試,保持test.pdf在th e根級別。 Java郵件服務API支持將附件添加爲InputStream/InputStreamSource。

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