我认为这不是一个IntelliJ问题,而是提供所有细节。我在IntelliJ 13中创建了一个Android测试应用程序,我正在尝试测试Android应用程序中的一些现有代码。这段代码接受一个InputStream,它是一个要读取的JSON文件。我正在尝试测试一个读取此文件InputStream的方法。我有以下内容:
我的项目结构如下:
android_test
- libs
- res
- src
- testAssetes
- file.json
我的测试方法是:
public void testParseFile() {
FileInputStream in = new FileInputStream(new File("./testAssets/file.json"));
// code continues..
}
我一直收到FileNotFound异常。我也尝试了以下内容:
android_test
- libs
- res
- src
- com
- test
- file.json
然后我的代码被修改为:
InputStream in = getClass().getResourceAsStream("/com/test/file.json")
在这种情况下,InputStream始终为null。我用类似的代码创建了一个常规的java项目,它运行得很好。不确定它是否与InstrumentTestRunner的工作方式或处理方式有关。
更新:我刚刚意识到问题可能是因为这些测试正在使用在仿真器/设备上执行的InstrumentationTestRunner运行。所以我认为我需要知道的是如何将我的测试文件放到该文件系统上并将其读入以进行测试。
答案 0 :(得分:0)
您可以通过“运行>编辑配置”在IntelliJ中将android_test
目录指定为“工作目录”
答案 1 :(得分:0)
一种方法是使用一点反射。我使用的实用方法是:
public String assetFileContents(final String fileName) throws IOException {
StringBuilder text = new StringBuilder();
InputStream fileStream = this.getClass().getClassLoader()
.getResourceAsStream("assets/" + fileName);
BufferedReader reader = new BufferedReader(new InputStreamReader(fileStream));
String line;
while((line = reader.readLine()) != null) {
text.append(line);
}
return text.toString();
}
这会返回String
fileName
的内容。另外,我将测试文件保存在assets
/src/tests/assets
的{{1}}文件夹中(通过assets.srcDir
中的build.gradle
设置,我认为默认值为instrumentTests
而不是tests
})
我不认为InstrumentTestRunner
参数是相关的。只要它在源路径文件夹中,就应该与应用程序一起打包。
要查看使用测试文件运行的示例,请参阅我的存储库here(仅供参考,我目前正在重构项目,他们可能会在以后转移到另一个分支)。