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”。