ฉันมีปัญหามากมายเกี่ยวกับแหล่งข้อมูลการทดสอบใน 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 สตูดิโอ, ./gradlew data:test
แต่พวกเขาผ่านในบรรทัดคำสั่งด้วย เพื่อหลีกเลี่ยงมันฉันใช้แฮ็คนี้ (ใน Groovy)
def resource(String path) {
getClass().getResource(path) ?:
new File(getClass().getClassLoader().getResource('.').path
.replace('/build/classes/test/', "/build/resources/test$path"))
}
การใช้งาน: resource('/test.txt')
Android Studio 2.3, Gradle 3.3