2012-02-12 11 views
17

मैंने एक एंड्रॉइड टेस्ट प्रोजेक्ट स्थापित किया है जो जूनिट परीक्षण चलाता है। यह दो ग्रहण परियोजनाओं "एप्लिकेशन" और "एप्लिकेशनटेस्ट" का उपयोग कर रहा है जहां मेरे परीक्षण "एप्लिकेशनटेस्ट" प्रोजेक्ट में हैं। मेरे परीक्षणों में से मुझे एक फ़ाइल तक पहुंचने की ज़रूरत है, यह ठीक काम करता है अगर मैं एसडीकार्ड पर फाइल डालता हूं और फ़ाइल ऑब्जेक्ट को इंगित करता हूं। हालांकि मैं फ़ाइल को संसाधन के रूप में एक्सेस करना चाहता हूं, लेकिन ऐसा लगता है कि यह काम नहीं करता है। यह मैं क्या किया है:एंड्रॉइड टेस्ट प्रोजेक्ट में संसाधनों तक पहुंच

  • ApplicationTest/res/raw/myfile.xml
  • कोशिश कर रहा में फाइल सेव यह मिल का उपयोग कर रहे हैं: InputStream is = getContext().getResources().openRawResource(R.raw.myfile);

लेकिन है कि मुझे इस अपवाद देता है:

 
android.content.res.Resources$NotFoundException: File Hello World, HelloAndroidActivity! from drawable resource ID #0x7f040000 
at android.content.res.Resources.openRawResource(Resources.java:823) 
at android.content.res.Resources.openRawResource(Resources.java:799) 
at com.quizzer.test.QuestionHandlerTests.testImportQuestions(Tests.java:182) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:169) 
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:154) 
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:529) 
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1448) 
Caused by: java.io.FileNotFoundException: Hello World, HelloAndroidActivity! 
at android.content.res.AssetManager.openNonAssetNative(Native Method) 
at android.content.res.AssetManager.openNonAsset(AssetManager.java:406) 
at android.content.res.Resources.openRawResource(Resources.java:820) 
... 14 more 

मेरा परीक्षण वर्ग AndroidTestCase को बढ़ाता है ताकि वह संदर्भ कहां से आता है।

अद्यतन:

तो समस्या हो कि संकलन के दौरान परीक्षण परियोजना में संसाधनों का उपयोग किया जाता लगते हैं, लेकिन क्रम में मुख्य परियोजना में संसाधनों का इस्तेमाल किया जाता है। मैं अभी भी यह सुनिश्चित नहीं कर रहा हूं कि इसे कैसे ठीक किया जाए। तो वर्तमान में यह केवल तभी काम करता है जब मैंने परीक्षण परियोजना में एक ही कच्चे संसाधन को रखा और मुख्य परियोजना जो बिल्कुल बेवकूफ है।

+0

इसकी। या यह सिर्फ मुझे हो सकता है। क्या आप यहां विस्तार करने की कोशिश कर रहे हैं। सेटअप स्पष्ट है, बस एक उदाहरण परिणाम और एक असफल परिणाम के लिए आप क्या उम्मीद करते हैं इसका एक उदाहरण दें। – Siddharth

+0

@ सिद्धार्थ मुझे यकीन नहीं है कि मुझे क्या विस्तार करना चाहिए, मेरा मतलब है कि अगर संसाधन पाया गया तो मेरा परीक्षण पास होगा (क्योंकि अगर मैं सीधे एसडीकार्ड से फ़ाइल तक पहुंचता हूं तो यह ठीक काम करता है)। मुझे लगता है कि मैंने एंड्रॉइड में संसाधन फ़ाइलों का उपयोग करने के तरीके, या इकाई परीक्षण कक्षाओं से उन्हें कैसे पहुंचाया जा सकता है, इस बारे में कुछ याद किया होगा। – Zitrax

+0

तो क्या यह मदद करेगा यदि एंड्रॉइड टेस्ट प्रोजेक्ट एक उप परियोजना है? या एक निर्भर परियोजना? – Siddharth

उत्तर

23

मैं AndroidTestCase के बजाय ActivityTestCase का विस्तार करने का सुझाव दूंगा। आप

getInstrumentation().getContext().getResources().openRawResource(R.raw.your_res) के माध्यम से परीक्षण परियोजना संसाधनों तक पहुंच सकते हैं।

डमी परीक्षण का मामला उदाहरण:

public class Test extends ActivityTestCase { 

    public void testFoo() { 

     // .. test project environment 
     Context testContext = getInstrumentation().getContext(); 
     Resources testRes = testContext.getResources(); 
     InputStream ts = testRes.openRawResource(R.raw.your_res); 

     assertNotNull(testRes); 
    }  
} 

और परीक्षण तरीकों में तो getInstrumentation().getTargetContext() का उपयोग भी आप अपने AndroidTestCase विस्तार में getContext() इस्तेमाल किया।

+0

धन्यवाद यह काम किया। मुझे डेटाबेस बनाने के साथ कोई समस्या मिली, लेकिन इसे यहां हल करने के लिए मिला: http://stackoverflow.com/a/8488722/11722 – Zitrax

+0

इसे सुनकर खुशी हुई। :) – plesatejvlk

+1

सुझाव के लिए बहुत बहुत धन्यवाद! अनुलेख इंस्ट्रुमेंटेशनटेस्टकेस भी काम करता प्रतीत होता है। – Y2i

2

मैं इस प्रकार परीक्षण का मामला व्युत्पन्न:

class MyTest extends InstrumentationTestCase { 
    void setUp() { 
     InputStream is = getInstrumentation().getContext().getAssets() 
      .open("test_image.bmp"); 
     ... 
    } 
} 

और फ़ाइल test_image.bmp संपत्ति निर्देशिका है, जो उचित है अगर आप कुछ परीक्षण से संबंधित काम के लिए संपत्ति का उपयोग करना चाहते में सहेजा गया है - और उसके नहीं यूई संसाधनों का हिस्सा। तकनीक का उपयोग अन्य संदर्भ में यहां किया जाता है: https://stackoverflow.com/a/4570206/1577626

+1

मुझे 'getCargetxt() '' getTargetContext() ' – joslinm

+0

में बदलना पड़ा, मुझे अभी भी एक त्रुटि मिल रही है: ** android.content.res.Resources $ NotFoundException: स्ट्रिंग संसाधन आईडी # 0x7f06000e ** –

0

Android Gradle Plugin संस्करण 1.1 के बाद से आपको फ़ाइल संसाधन लोड करने के लिए Instrumentation का उपयोग नहीं करना है।

मैंने here लिखा था POOO unit test केस के साथ इसे कैसे करें।

0

निर्माण उपकरणों के साथ 3.0.0 आप का उपयोग नहीं कर सकते स्पष्ट आप यहाँ करने के लिए कोशिश कर रहे हैं ActivityTestRule

@RunWith(AndroidJUnit4::class) 
@SmallTest 
class MainActivityTest { 
    @Rule 
    @JvmField 
    var mainActivityRule = ActivityTestRule(MainActivity::class.java) 

    private val baseUrl: String 
     get() { 
      return mainActivityRule.activity.getString(R.string.base_url) 
     } 

    @Test 
    fun launchingWithMovieIntent() { 
      assert.that(baseUrl, equalTo("someValue") 
     } 
    } 
} 
संबंधित मुद्दे