मुझे एंड्रॉइड स्टूडियो में परीक्षण संसाधनों के साथ बहुत सारी समस्याएं हैं इसलिए मैंने स्पष्टता के लिए कुछ परीक्षण स्थापित किए। मेरी
mobile(Android Application) परियोजना में मैंने निम्नलिखित फाइलें जोड़ीं:
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"));
उसी रूट प्रोजेक्ट में मेरे पास एक जावा (एंड्रॉइड नहीं) प्रोजेक्ट है data। यदि मैं डेटा प्रोजेक्ट में समान फ़ाइलें जोड़ता हूं:
data/src/test/java/test/ResourceTest.java
data/src/test/resources/test.txt
data/src/test/resources/test/samePackage.txt
फिर उपरोक्त सभी परीक्षण विफल हो जाएंगे यदि मैं उन्हें एंड्रॉइड स्टूडियो से निष्पादित करता हूं, लेकिन वे कमांड लाइन पर गुजरते हैं ./gradlew data:test। इसके आसपास जाने के लिए मैं इस हैक का उपयोग करता हूं (ग्रूवी में)
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')
एंड्रॉइड स्टूडियो 2.3, ग्रैडल 3.3