2011-03-07 27 views
16

मैं परीक्षण उपकरण में उत्पन्न स्ट्रिंग संसाधनों तक पहुंचने के लिए अपने उपकरण परीक्षणों के लिए एक रास्ता खोजने का प्रयास कर रहा हूं।उपकरण परीक्षण संसाधनों तक पहुंच

अधिक विवरण:

मैं एक Android परीक्षण का मामला जो ActivityInstrumentationTestCase2 से विरासत है। मैंने पहली जगह में टेस्ट बनाने के लिए एक्लिप्स की नई एंड्रॉइड टेस्ट प्रोजेक्ट का इस्तेमाल किया। परीक्षण परियोजना में संसाधन होते हैं (नियमित एंड्रॉइड प्रोजेक्ट के संसाधनों के समान)। मैं विभिन्न व्यक्तिगत परीक्षणों में परीक्षण परियोजना में प्रोग्रामिंग रूप से स्ट्रिंग संसाधनों तक पहुंचने का एक तरीका खोजने का प्रयास कर रहा हूं। मैंने कोशिश की है:

String s = getInstrumentation().getContext().getString(R.string.blah); 

और

String s = mActivity.getApplicationContext().getString(R.string.blah); 

दोनों ही तरीकों से एक NotFoundException फेंक देते हैं। मेरे स्ट्रिंग्स "xx" में स्ट्रिंग "blah" परिभाषित है। ऊपर कोड में आर मेरे परीक्षण पैकेज से एक आयात है, न कि परीक्षण के तहत आवेदन के पैकेज। मैं बाद के कॉल के साथ एप्लिकेशन पैकेज में परिभाषित संसाधनों तक पहुंचने में सक्षम हूं।

मेरे परीक्षणों में एक्सएमएल परिभाषित स्ट्रिंग संसाधनों तक पहुंचने का एक तरीका पता लगाने के लिए उपयोगी होगा (क्योंकि मैं कोड में स्ट्रिंग टाइपिंग से बचना चाहता हूं)। मैं क्या गलत कर रहा हूं?

उत्तर

1

मुझे लगता है कि संसाधन फ़ाइलों को कहीं और संग्रहीत किए बिना यह संभव नहीं है, लेकिन आप Robotium जैसे कुछ का उपयोग कर सकते हैं जहां आप केवल Solo.getString() का उपयोग करते हैं और आपको अपना संसाधन मिलता है।

3

मैंने कोशिश की:

String s = getInstrumentation().getContext().getString(com.myProject.test.R.string.blah); 

जहां com.myProject परियोजना के पैकेज है परीक्षण किया जाना और com.myProject.test परीक्षण परियोजना के पैकेज है।

यदि मैं setup() के अंदर कोड डालता हूं तो यह मेरे लिए काम करता है। अगर मैं इसे कन्स्ट्रक्टर के अंदर रखता हूं तो यह काम नहीं करता है।

17

यहां तक ​​कि अगर इस पोस्ट अब वर्तमान है - यह इसके अलावा मदद कर सकता है किसी को:

को समझने के लिए यह कैसे काम करता है, तो आप को ध्यान में रखना है कि संदर्भ आपके उपकरण में रहती आवेदन के संदर्भ से एक और है आप के खिलाफ अपना परीक्षण चला रहे हैं। जैसा कि आपने सही ढंग से कहा है, आप अपने लक्ष्य के संसाधनों को स्मारक संदर्भ से एक्सेस नहीं कर सकते हैं। आप परीक्षण परियोजना के अंदर एक अलग एक्सएमएल फ़ाइल में अपने उपकरण संदर्भ के लिए कुछ परिभाषित कर सकते हैं, या - आप पूर्वनिर्धारित संसाधनों के उपयोग करना चाहते हैं - आप उन्हें इस तरह से प्राप्त कर सकते हैं:

Resources res = getInstrumentation().getTargetContext().getResources(); 
res.getString(R.string.xxx); // get a string resource 

न तो उपकरण संदर्भ (जैसा कि वुजुन ने लिखा था), न ही लक्ष्य संदर्भ उपलब्ध है, जब तक टेस्टकेस निर्माण पूरी तरह से पूरा नहीं हो जाता है।

+4

"getCargetxt()" के अंत में "getTargetContext()" ने चाल प्राप्त की :-) (और शायद पोस्टर "स्वीकृत" के रूप में एक उत्तर चिह्नित कर सकता है?) – Christine

+0

(समर्थन) परीक्षण धावक के संस्करण 0.5 में, getInstrumentation() विधि हटा दी गई है। संदर्भ प्राप्त करने के लिए, InstrumentationRegistry.getTargetContext() का उपयोग करें। – Metallica

संबंधित मुद्दे