Android Studio'daki test kaynakları ile ilgili pek çok sorun yaşadım, bu yüzden netlik sağlamak için birkaç test yaptım. Benim içinde
mobile
(Android Uygulama) projesi aşağıdaki dosyaları ekledi:
mobile/src/test/java/test/ResourceTest.java
mobile/src/test/resources/test.txt
mobile/src/test/resources/test/samePackage.txt
Test sınıfı (tüm testler geçer):
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"))
Aynı kök projede adında bir Java (Android değil) projem var data
. Aynı dosyaları veri projesine eklersem:
data/src/test/java/test/ResourceTest.java
data/src/test/resources/test.txt
data/src/test/resources/test/samePackage.txt
Sonra bunları Android Studio'dan çalıştırırsam yukarıdaki tüm testler başarısız olur, ancak komut satırından ile geçerler ./gradlew data:test
. Bunu aşmak için bu hack'i kullanıyorum (Groovy'de)
def resource(String path) {
getClass().getResource(path) ?:
new File(getClass().getClassLoader().getResource('.').path
.replace('/build/classes/test/', "/build/resources/test$path"))
}
Kullanım: resource('/test.txt')
Android Studio 2.3, Gradle 3.3