2014-10-10 76 views
0

這是一個非常簡單的問題,我找不到解決方案。我有一個相當複雜的Android應用程序,它使用相機並對拍攝的圖像進行一些操作。我現在想爲某些函數編寫單元測試,但我無法加載文件。單元測試的文件位置

在Android測試項目中,我應該在哪裏粘貼圖像進行測試,以及如何將該圖像加載到File對象中?我有一個普通的junit.framework.TestCase類,需要發送一個File到類上進行測試。提前致謝!

回答

1

這可能不是最好的解決方案,因爲它可能會大大增加您的項目。但是,在您的測試用例中沒有編寫代碼來下載圖像,我不確定可能有哪些其他方法。

簡單地說,我在我的資源中'測試'drawables,並將它們加載爲位圖,然後將它們存儲在光盤的某個位置以最終在我的測試中引用它們。這是我使用的代碼:

public File saveResourceImageToExternalStorage(Activity activity, String picFileName, int imageId) 
{ 
    Bitmap bitmap = BitmapFactory.decodeResource(activity.getResources(), imageId); 
    File picFile = null; 
    OutputStream os = null; 
    try 
    { 
     picFile = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), picFileName); 

     picFile.createNewFile(); 

     os = new FileOutputStream(picFile); 

     bitmap.compress(Bitmap.CompressFormat.JPEG, 100, os); 
    } 
    catch (IOException e) 
    { 
     e.printStackTrace(); 
    } 
    return file; 
} 

您可能想要使該方法更健壯一些。

最後,您可以將您的測試圖像存儲在項目的資產文件夾中。然後,你可以從你的資產文件夾中的一個活動使用getAssets()或者使用應該是這樣的file:///android_asset/your_file_name.jpg

編輯路徑讓他們

我認爲更好的解決方案,經過一番研究,會增加你的文件到您的測試項目的資產並使用InputStream input = this.getContext().getAssets().open("file.jpg");。您需要從繼承自InstrumentationTestCase的類或我想,ActivityInstrumentationTestCase2中調用此函數。然後你可以操縱輸入流如何你需要

+0

這絕對不是理想的。理想情況下,我希望在測試項目中有圖像,但可惜的是,這是我必須做的。 – 2014-10-10 17:58:57

+0

經過一番研究,似乎將測試項目的資源中添加文件並使用InputStream input = this.getContext()。getAssets()。open(「file.jpg」);將會更加簡單。您需要從繼承自InstrumentationTestCase的類或我認爲的ActivityInstrumentationTestCase2中調用此函數。然後你可以操縱輸入流如何你需要。 – maraci 2014-10-14 16:29:53

+0

謝謝。這是我正在尋找的答案類型。你能否讓它成爲答案/更新你的答案,以便我可以標記它。 – 2014-10-16 22:21:22