मुझे एंड्रॉइड स्टूडियो में परीक्षण संसाधनों के साथ बहुत सारी समस्याएं हैं इसलिए मैंने स्पष्टता के लिए कुछ परीक्षण स्थापित किए। मेरी
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