Android Studiounit testing:读取数据(input)文件
在unit testing中,如何从我的(桌面)文件系统上的json文件中读取数据,而不对path进行硬编码?
我想从文件中读取testinginput(对于我的parsing方法),而不是创build静态string。
该文件与我的unit testing代码位于同一位置,但如果需要,也可以将其放在项目的其他位置。 我正在使用Android Studio。
 取决于android-gradle-plugin版本: 
1.版本1.5和更高版本:
 只需将json文件放到src/test/resources/test.json并引用即可 
 classLoader.getResource("test.json"). 
不需要gradle修改。
2.版本低于1.5 :(如果由于某种原因,以上解决scheme不起作用)
- 
确保您至less使用Android Gradle插件版本1.1 。 按照链接正确设置Android Studio。 
- 
创build test目录。 把unit testing类放在java目录下,把你的资源文件放在res目录下。 Android Studio应该像下面这样标记它们: 
- 
创build gradle任务,将资源复制到classes目录中,以使其对classloader可见:android{ ... } task copyResDirectoryToClasses(type: Copy){ from "${projectDir}/src/test/res" into "${buildDir}/intermediates/classes/test/debug/res" } assembleDebug.dependsOn(copyResDirectoryToClasses)
- 
现在您可以使用此方法获取文件资源的 File引用:private static File getFileFromPath(Object obj, String fileName) { ClassLoader classLoader = obj.getClass().getClassLoader(); URL resource = classLoader.getResource(fileName); return new File(resource.getPath()); } @Test public void fileObjectShouldNotBeNull() throws Exception { File file = getFileFromPath(this, "res/test.json"); assertThat(file, notNullValue()); }
- 按全class或专业testing方法按Ctrl + Shift + F10运行unit testing。
让我知道,如果它适合你。 在我的情况下,所以如果你有任何问题随时问:)
 对于本地unit testing(vs.testingtesting),可以将文件放在src/test/resources ,并使用classLoader读取它们。 例如,以下代码在资源目录中打开myFile.txt文件。 
 InputStream in = this.getClass().getClassLoader().getResourceAsStream("myFile.txt"); 
它与之合作
- Android Studio 1.5.1
- gradle插件1.3.1
 在Android Studio中,我有很多testing资源的问题,所以为了清晰起见,我设置了一些testing。 在我的mobile (Android应用程序)项目中,我添加了以下文件: 
 mobile/src/test/java/test/ResourceTest.java mobile/src/test/resources/test.txt mobile/src/test/resources/test/samePackage.txt 
testing类(所有testing通过):
 assertTrue(getClass().getResource("test.txt") == null); assertTrue(getClass().getResource("/test.txt").getPath().endsWith("test.txt")); assertTrue(getClass().getResource("samePackage.txt").getPath().endsWith("test/samePackage.txt")); assertTrue(getClass().getResource("/test/samePackage.txt").getPath().endsWith("test/samePackage.txt")); assertTrue(getClass().getClassLoader().getResource("test.txt").getPath().endsWith("test.txt")); assertTrue(getClass().getClassLoader().getResource("test/samePackage.txt").getPath().endsWith("test/samePackage.txt")); 
 在同一个根项目中,我有一个名为data的Java(不是Android)项目 。 如果我将相同的文件添加到数据项目: 
 data/src/test/java/test/ResourceTest.java data/src/test/resources/test.txt data/src/test/resources/test/samePackage.txt 
 然后,所有上面的testing将失败,如果我从Android Studio执行它们,但他们传递命令行./gradlew data:test 。 为了解决这个问题,我使用了这个hack(在Groovy中) 
 def resource(String path) { getClass().getResource(path) ?: // Hack to load test resources when executing tests from Android Studio new File(getClass().getClassLoader().getResource('.').path .replace('/build/classes/test/', "/build/resources/test$path")) } 
 用法: resource('/test.txt') 
Android Studio 2.3,Gradle 3.3
如果你去运行 – >编辑configuration – > JUnit,然后select你的unit testing运行configuration,有一个“工作目录”设置。 这应该指向你的json文件。 请记住,这可能会打破其他testing。
在我的情况下,解决scheme是添加到gradle文件
 sourceSets { test.resources.srcDirs += 'src/unitTests/resources' } 
一切都被AS 2.3.1发现后
 javaClass.classLoader.getResourceAsStream("countries.txt") 
- Android Studio在使用旧API的设备上进行debugging时会显示来自compileSdkVersion的API的信息
- Android Studio:hover时javadoc为空
- 如何在Ubuntu上安装Android Studio?
- Android Studio 1.2 – 默认情况下,项目编码不匹配
- OS X – 无法启动Git:/ usr / bin / git可能是Git可执行文件的path无效
- 带有Google Play服务的Android Studio
- 如何为CTRL + Y而不是CTRL + Shift + ZconfigurationintelliJ / Android Studio重做操作
- 执行失败的应用程序:processDebugResources Android Studio
- Android Studio构build失败,在根项目“MyProject”中找不到“Task”。