Compose, सामान्य टेस्टिंग फ़्रेमवर्क के साथ इंटिग्रेट होता है.
Espresso के साथ इंटरऑपरेबिलिटी की सुविधा
हाइब्रिड ऐप्लिकेशन में, व्यू के क्रम में Compose कॉम्पोनेंट और
Compose कंपोज़ेबल में व्यू मिल सकते हैं. इसके लिए, AndroidView कंपोज़ेबल का इस्तेमाल किया जाता है.
दोनों तरह के कॉम्पोनेंट को मैच करने के लिए, किसी खास तरीके का इस्तेमाल करने की ज़रूरत नहीं होती. Espresso के
onViewसे व्यू और ComposeTestRuleसे Compose एलिमेंट मैच किए जाते हैं.
@Test
fun androidViewInteropTest() {
// Check the initial state of a TextView that depends on a Compose state.
Espresso.onView(withText("Hello Views")).check(matches(isDisplayed()))
// Click on the Compose button that changes the state.
composeTestRule.onNodeWithText("Click here").performClick()
// Check the new value.
Espresso.onView(withText("Hello Compose")).check(matches(isDisplayed()))
}
UiAutomator के साथ इंटरऑपरेबिलिटी की सुविधा
डिफ़ॉल्ट रूप से, कंपोज़ेबल को UiAutomator से सिर्फ़ उनके
आसान डिस्क्रिप्टर (दिखाया गया टेक्स्ट, कॉन्टेंट का ब्यौरा वगैरह) से ऐक्सेस किया जा सकता है. अगर आपको
Modifier.testTag का इस्तेमाल करने वाले किसी कंपोज़ेबल को ऐक्सेस करना है, तो आपको उस कंपोज़ेबल के सबट्री के लिए, सिमैंटिक प्रॉपर्टी testTagsAsResourceId को चालू करना होगा. इस सुविधा को चालू करना उन कंपोज़ेबल के लिए काम का होता है जिनके पास कोई दूसरा यूनीक हैंडल नहीं होता. जैसे, स्क्रोल किए जा सकने वाले कंपोज़ेबल (उदाहरण के लिए, LazyColumn).
सिमैंटिक प्रॉपर्टी को कंपोज़ेबल के क्रम में सिर्फ़ एक बार चालू करें. इससे यह पक्का किया जा सकेगा कि Modifier.testTag वाले सभी नेस्ट किए गए कंपोज़ेबल को UiAutomator से ऐक्सेस किया जा सके.
Scaffold(
// Enables for all composables in the hierarchy.
modifier = Modifier.semantics {
testTagsAsResourceId = true
}
){
// Modifier.testTag is accessible from UiAutomator for composables nested here.
LazyColumn(
modifier = Modifier.testTag("myLazyColumn")
){
// Content
}
}
Modifier.testTag(tag) वाले किसी भी कंपोज़ेबल को
By.res(resourceName) का इस्तेमाल करके ऐक्सेस किया जा सकता है. इसके लिए, resourceName के तौर पर वही tag इस्तेमाल किया जाता है.
val device = UiDevice.getInstance(getInstrumentation())
val lazyColumn: UiObject2 = device.findObject(By.res("myLazyColumn"))
// Some interaction with the lazyColumn.
अतिरिक्त संसाधन
- Android पर ऐप्लिकेशन की टेस्टिंग करना: Android पर टेस्टिंग के मुख्य लैंडिंग पेज पर, टेस्टिंग की बुनियादी बातों और तकनीकों के बारे में ज़्यादा जानकारी मिलती है.
- टेस्टिंग की बुनियादी बातें: Android ऐप्लिकेशन की टेस्टिंग से जुड़े मुख्य कॉन्सेप्ट के बारे में ज़्यादा जानें.
- स्थानीय टेस्ट: कुछ टेस्ट स्थानीय तौर पर, अपने वर्कस्टेशन पर किए जा सकते हैं.
- इंस्ट्रुमेंटेड टेस्ट: इंस्ट्रुमेंटेड टेस्ट करना भी एक अच्छी प्रैक्टिस है. इसका मतलब है कि ऐसे टेस्ट जो सीधे डिवाइस पर किए जाते हैं.
- लगातार इंटिग्रेशन: लगातार इंटिग्रेशन की मदद से, अपने टेस्ट को डिप्लॉयमेंट पाइपलाइन में इंटिग्रेट किया जा सकता है.
- अलग-अलग स्क्रीन साइज़ के लिए टेस्ट करना: उपयोगकर्ताओं के पास कई डिवाइस उपलब्ध हैं. इसलिए, आपको अलग-अलग स्क्रीन साइज़ के लिए टेस्ट करना चाहिए.
- Espresso: Espresso को व्यू पर आधारित यूज़र इंटरफ़ेस (यूआई) के लिए बनाया गया है. हालांकि, Compose की टेस्टिंग के कुछ पहलुओं के लिए, Espresso की जानकारी मददगार साबित हो सकती है.