如何在不使用[[[1, 1, 1, 1, 1],
[1, 1, 2, 1, 1],
[1, 2, 3, 2, 1],
[1, 1, 2, 1, 1],
[1, 1, 1, 1, 1]],
[[2, 2, 2, 2, 2],
[1, 1, 2, 1, 1],
[1, 2, 3, 2, 1],
[1, 1, 2, 1, 1],
[1, 1, 1, 1, 1]]]
或AssetManager
的情况下访问Instrumentation测试文件。
我正在对我的MediaPlayerFragment进行集成测试,它接受表示文件名的String。我不想ClassLoader
或
getInstrumentation().getTargetContext().getResources().getAssets().open(testFile);
因为我的MediaPlayerFragment采用文件名并自己生成InputStream in = this.getClass().getClassLoader().getResourceAsStream(file);
。
我的问题是我一直在接受:
FileInputStream
我的测试是:
FileNotFoundException SC-00.mp3: open failed: ENOENT (No such file or directory).
我的资产位于:src/androidTest/java/com.olfybsppa.inglesaventurero.tests/nonUIFragments/MediaPlayerFragment1Test
我尝试将文件名设为'assets / SC-00.mp3'和'androidTest / assets / SC-00.mp3' - 没有运气。
我的sourceSets是
src/androidTest/assets/SC-00.mp3
但这不起作用。
我也尝试过添加
sourceSets {
main {
java.srcDirs = ['src/main/java', 'src/main/java/start', 'src/main/java/adapters', 'src/main/java/pagers']
}
}
到我的源集,但不起作用。
简化1.
这是我的测试类的简化版本。我一直收到FileNotFoundException。我想弄清楚String filename应该是什么?
androidTest {
java.srcDir 'src/androidTest/assets'
}
答案 0 :(得分:2)
您无法正常打开资产上的InputStream
,因为资产已打包在您的apk中。 AssetManager.open
提供了解决此问题的方法,但您说您不想这样做。
如果您需要一个可以使用FileInputStream
打开的文件路径,您可以获取资产,将其复制到临时文件,然后将临时文件的路径传递给您的方法。
File temp = File.createTempFile("prefix", "suffix");
OutputStream out = new FileOutputStream(temp);
InputStream in = assetManager.open("asset");
byte[] buffer = new byte[1024];
int read;
while((read = in.read(buffer)) != -1){
out.write(buffer, 0, read);
}
String filePath = temp.getPath();
在完成后重新开始删除临时文件。
答案 1 :(得分:0)
一种可行的方法是将文件存储在ExternalStorageDirectory
上,并像以下一样访问它:
String directory = android.os.Environment.getExternalStorageDirectory().getAbsolutePath();
String filePath = directory + File.separator + "some_file.txt";
try {
BufferedReader reader = new BufferedReader(new FileReader(filePath));
// Do something with the reader.
} catch (IOException e) {
e.printStackTrace();
fail();
}
编辑: This question可能相关。
第二次修改:从this question开始,您似乎必须将文件放在正在测试的构建类型中。如果是调试版,请尝试:
src/debug/res/assets