Love..
8
我在Android Studio中遇到了很多测试资源问题,所以为了清晰起见,我设置了一些测试.在我的
mobile(Android应用程序)项目中,我添加了以下文件:
mobile/src/test/java/test/ResourceTest.java
mobile/src/test/resources/test.txt
mobile/src/test/resources/test/samePackage.txt
测试类(所有测试通过):
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"));
在同一个根项目中,我有一个名为Java(不是Android)的项目data.如果我将相同的文件添加到数据项目:
data/src/test/java/test/ResourceTest.java
data/src/test/resources/test.txt
data/src/test/resources/test/samePackage.txt
如果我从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