Tôi đã gặp rất nhiều vấn đề với tài nguyên thử nghiệm trong Android Studio nên tôi đã thiết lập một vài thử nghiệm để rõ ràng. Trong
mobile
dự án (Ứng dụng Android) của tôi, tôi đã thêm các tệp sau:
mobile/src/test/java/test/ResourceTest.java
mobile/src/test/resources/test.txt
mobile/src/test/resources/test/samePackage.txt
Lớp kiểm tra (tất cả các bài kiểm tra đều vượt qua):
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"));
Trong cùng một dự án gốc, tôi có một dự án Java (không phải Android) được gọi data
. Nếu tôi thêm các tệp giống nhau vào dự án dữ liệu:
data/src/test/java/test/ResourceTest.java
data/src/test/resources/test.txt
data/src/test/resources/test/samePackage.txt
Sau đó, tất cả các thử nghiệm ở trên sẽ thất bại nếu tôi thực hiện chúng từ Android Studio, nhưng chúng chuyển qua dòng lệnh với ./gradlew data:test
. Để giải quyết vấn đề đó, tôi sử dụng bản hack này (ở 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"))
}
Sử dụng: resource('/test.txt')
Android Studio 2.3, Gradle 3.3