如何在不使用AssetManager
或ClassLoader
的情況下訪問儀器測試的文件。訪問InstrumentationTest類中的文件
我正在做一個集成測試我的MediaPlayerFragment接受一個代表文件名的字符串。我不想getInstrumentation().getTargetContext().getResources().getAssets().open(testFile);
或
InputStream in = this.getClass().getClassLoader().getResourceAsStream(file);
,因爲我MediaPlayerFragment一個文件名,使FileInputStream
本身。
我的問題是我不斷收到:
FileNotFoundException SC-00.mp3: open failed: ENOENT (No such file or directory).
我的測試是:
src/androidTest/java/com.olfybsppa.inglesaventurero.tests/nonUIFragments/MediaPlayerFragment1Test
我的資產是:src/androidTest/assets/SC-00.mp3
我試着給文件名作爲「資產/SC-00.mp3'和'androidTest/assets/SC-00.mp3'-沒有運氣。
我sourceSets是
sourceSets {
main {
java.srcDirs = ['src/main/java', 'src/main/java/start', 'src/main/java/adapters', 'src/main/java/pagers']
}
}
,但不起作用。
我也嘗試添加
androidTest {
java.srcDir 'src/androidTest/assets'
}
我的源集和不工作。
簡化1.
這是我的測試類的簡化版本。我不斷收到FileNotFoundException。我想弄清楚什麼字符串文件名應該是?這樣做的
public class MediaPlayerFragment1Test
extends ActivityInstrumentationTestCase2<DefaultActivity> {
private DefaultActivity mActivity;
private Instrumentation mInstrumentation;
private String filename = "file:///androidTest/assets/SC-00.mp3";
public static String MEDIA_PLAYER_TAG = "MEDIA PLAYER TAG";
public MediaPlayerFragment1Test() {
super(DefaultActivity.class);
}
@Override
public void setUp() throws Exception {
super.setUp();
mActivity = getActivity();
}
public void tearDown() throws Exception {
super.tearDown();
}
@SmallTest
public void testFileIsAccessible() {
try {
FileInputStream fileInputStream = new FileInputStream(filename);
} catch (IOException e) {
assertTrue(e instanceof FileNotFoundException);
assertTrue(false);
}
}
}
將文件放入外部存儲器並不是很好的測試方法,因爲它不容易重現。我試着把它放在src/debug/res/assets和src/debug/assets中,沒有運氣。我每次獲得'filepath'的名稱時,都試過filename =「res/assets/SC-00.mp3」,filename =「assets/SC-00.mp3」,filename =「SC-00.mp3」:open失敗:ENOENT。 – flobacca