अपने ऐप्लिकेशन की गतिविधियों की जांच करें

ऐक्टिविटी, आपके ऐप्लिकेशन में हर उपयोगकर्ता इंटरैक्शन के लिए कंटेनर के तौर पर काम करती हैं. इसलिए, यह पता लगाना ज़रूरी है कि डिवाइस-लेवल पर आपके ऐप्लिकेशन की गतिविधियां कैसे काम करती हैं इवेंट में ये शामिल हैं:

  • डिवाइस का फ़ोन ऐप्लिकेशन जैसा कोई दूसरा ऐप्लिकेशन, आपके ऐप्लिकेशन की गतिविधि में रुकावट डालता है.
  • सिस्टम आपकी गतिविधि को बंद कर देता है और उसे फिर से बनाता है.
  • उपयोगकर्ता आपकी गतिविधि को नई विंडो वाले एनवायरमेंट में रखता है, जैसे कि पिक्चर में पिक्चर (पीआईपी) या मल्टी-विंडो की सुविधा.

खास तौर पर, यह पक्का करना ज़रूरी है कि आपकी गतिविधि गतिविधि में बताए गए इवेंट के लिए लाइफ़साइकल.

इस गाइड में यह पता लगाने का तरीका बताया गया है कि आपका ऐप्लिकेशन, डेटा मैनेज कर सकता है या नहीं इंटिग्रिटी और अच्छा उपयोगकर्ता अनुभव, जैसे कि आपके ऐप्लिकेशन की गतिविधियों के ट्रांज़िशन अलग-अलग स्थितियों के बारे में बताता है.

किसी गतिविधि की स्थिति को बेहतर बनाएं

अपने ऐप्लिकेशन की गतिविधियों का परीक्षण करने का एक मुख्य पहलू यह है कि आप अपने ऐप्लिकेशन के गतिविधियों के लिए इस्तेमाल किया जा सकता है. इसे "दिए गए" के रूप में परिभाषित करने के लिए का हिस्सा है, तो इसका इस्तेमाल करें ActivityScenario के इंस्टेंस, इसका हिस्सा है AndroidX Test लाइब्रेरी. इस क्लास का इस्तेमाल करके, ये काम किए जा सकते हैं अपनी गतिविधि को उन स्थितियों में सेव करना होगा जो डिवाइस-लेवल के इवेंट को सिम्युलेट करता है.

ActivityScenario एक क्रॉस-प्लैटफ़ॉर्म एपीआई है. इसका इस्तेमाल लोकल यूनिट टेस्ट में किया जा सकता है उपयोगकर्ता, डिवाइस पर इंटिग्रेशन टेस्ट कर सकते हैं. किसी असली या वर्चुअल डिवाइस पर, ActivityScenario, थ्रेड की सुरक्षा की सुविधा देता है. इससे आपके इवेंट के बीच के इवेंट को सिंक किया जाता है टेस्ट के इंस्ट्रुमेंटेशन थ्रेड और वह थ्रेड जो आपकी गतिविधि को टेस्ट के तौर पर चलाता है.

यह एपीआई खास तौर पर इस बात का आकलन करने में कारगर है कि टेस्ट तब काम करता है, जब उसे बनाया जाता है या खत्म किया जाता है. इस सेक्शन में आपको सबसे आम इस एपीआई से जुड़े इस्तेमाल के उदाहरण.

कोई गतिविधि बनाएं

जांच के तहत गतिविधि बनाने के लिए, नीचे दिए गए स्निपेट में दिखाए गए कोड को जोड़ें:

@RunWith(AndroidJUnit4::class)
class MyTestSuite {
    @Test fun testEvent() {
       launchActivity<MyActivity>().use {
       }
    }
}

गतिविधि बनाने के बाद, ActivityScenario गतिविधि को RESUMED राज्य. इस स्थिति से पता चलता है कि आपकी गतिविधि चल रही है और उपयोगकर्ताओं को दिखता है. इस स्थिति में, आपके पास अपनी गतिविधि की Espresso यूज़र इंटरफ़ेस (यूआई) टेस्ट का इस्तेमाल करने वाले View एलिमेंट.

Google का सुझाव है कि आप जांच के समय close को कॉल करें पूरा करता है. यह संबंधित संसाधन खाली करता है और बेहतर की स्थिरता कैसी है. ActivityScenario, Closeable को लागू करता है, ताकि आप ये काम कर सकें use एक्सटेंशन या Java प्रोग्रामिंग में try-with-resources लागू करें ताकि गतिविधि अपने-आप बंद हो जाए.

इसके अलावा, अपने-आप कॉल होने की सुविधा के लिए, ActivityScenarioRule का इस्तेमाल किया जा सकता है हर टेस्ट से पहले ActivityScenario.launch और ActivityScenario.close टेस्ट टियरडाउन पर. नीचे दिए गए उदाहरण में, नियम तय करने और इससे एक उदाहरण:

@RunWith(AndroidJUnit4::class)
class MyTestSuite {
    @get:Rule var activityScenarioRule = activityScenarioRule<MyActivity>()

    @Test fun testEvent() {
        val scenario = activityScenarioRule.scenario
    }
}

गतिविधि को नई स्थिति पर ले जाएं

गतिविधि को CREATED या STARTED जैसी किसी दूसरी स्थिति पर ले जाने के लिए, कॉल करें moveToState(). यह कार्रवाई उस स्थिति के बारे में बताती है जहां आपकी गतिविधि रोका गया या रोका गया, क्योंकि उसे किसी अन्य ऐप्लिकेशन या सिस्टम ऐक्शन.

इस कोड स्निपेट में, moveToState() के इस्तेमाल का एक उदाहरण दिखता है:

@RunWith(AndroidJUnit4::class)
class MyTestSuite {
    @Test fun testEvent() {
        launchActivity<MyActivity>().use { scenario ->
            scenario.moveToState(State.CREATED)
        }
    }
}

गतिविधि की मौजूदा स्थिति का पता लगाना

परीक्षण की जा रही किसी गतिविधि की वर्तमान स्थिति का पता लगाने के लिए, आपके ActivityScenario ऑब्जेक्ट में state फ़ील्ड है. यह ख़ास तौर पर मददगार है यह पता लगाने के लिए गतिविधि की जांच की जा रही है कि गतिविधि किसी अन्य गतिविधि या अपने-आप खत्म होती है, जैसा कि इस कोड में दिखाया गया है snippet:

@RunWith(AndroidJUnit4::class)
class MyTestSuite {
    @Test fun testEvent() {
        launchActivity<MyActivity>().use { scenario ->
            scenario.onActivity { activity ->
              startActivity(Intent(activity, MyOtherActivity::class.java))
            }

            val originalActivityState = scenario.state
        }
    }
}

गतिविधि फिर से बनाएं

जब किसी डिवाइस में संसाधन कम होते हैं, तो सिस्टम किसी गतिविधि को बंद कर सकता है, जब उपयोगकर्ता आपके ऐप्लिकेशन पर वापस आए, तो आपके ऐप्लिकेशन को वह गतिविधि फिर से बनाने के लिए सेट करना ज़रूरी हो. इन शर्तों को सिम्युलेट करने के लिए, recreate() को कॉल करें:

@RunWith(AndroidJUnit4::class)
class MyTestSuite {
    @Test fun testEvent() {
        launchActivity<MyActivity>().use { scenario ->
            scenario.recreate()
        }
    }
}

ActivityScenario क्लास, गतिविधि के सेव किए गए इंस्टेंस की स्थिति को बनाए रखती है और @NonConfigurationInstance का इस्तेमाल करके एनोटेट किए गए कोई भी ऑब्जेक्ट. ये ऑब्जेक्ट लोड होते हैं को टेस्ट किया जा रहा है.

गतिविधि के नतीजे वापस पाना

पूरी हो चुकी गतिविधि से जुड़ा डेटा या नतीजा कोड पाने के लिए, आपके ActivityScenario ऑब्जेक्ट में result फ़ील्ड की वैल्यू, जैसा कि यहां दिया गया कोड स्निपेट जोड़ें:

@RunWith(AndroidJUnit4::class)
class MyTestSuite {
    @Test fun testResult() {
        launchActivity<MyActivity>().use {
            onView(withId(R.id.finish_button)).perform(click())

            // Activity under test is now finished.

            val resultCode = scenario.result.resultCode
            val resultData = scenario.result.resultData
        }
    }
}

गतिविधि में कार्रवाइयां ट्रिगर करें

ActivityScenario में सभी तरीके कॉल को ब्लॉक कर रहे हैं, इसलिए एपीआई को ज़रूरी ताकि आप उन्हें इंस्ट्रुमेंटेशन थ्रेड में चला सकें.

टेस्ट में हो रही अपनी गतिविधि में कार्रवाइयां ट्रिगर करने के लिए, Espresso व्यू मैचर का इस्तेमाल करके अपने दृश्य के तत्वों के साथ इंटरैक्ट करें:

@RunWith(AndroidJUnit4::class)
class MyTestSuite {
    @Test fun testEvent() {
        launchActivity<MyActivity>().use {
            onView(withId(R.id.refresh)).perform(click())
        }
    }
}

अगर आपको गतिविधि पर ही किसी तरीके को कॉल करने की ज़रूरत है, तो आपके पास ऐसा करने का विकल्प है सुरक्षित रूप से ActivityAction लागू करके:

@RunWith(AndroidJUnit4::class)
class MyTestSuite {
    @Test fun testEvent() {
        launchActivity<MyActivity>().use { scenario ->
            scenario.onActivity { activity ->
              activity.handleSwipeToRefresh()
            }
        }
    }
}