2014-10-10 61 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