अद्यतन अप्रैल 2015: Gradle उपकरण और एंड्रॉयड स्टूडियो now officially support unit testing का निर्माण और android.jar ठूंठ फेंकने से (कोई वास्तविक कार्यान्वयन) त्रुटि को रोकने के। तो, हाँ जावा वीएम पर परीक्षण चलाने के लिए संभव है, जब स्टब्स उचित रूप से mocked हैं। यह एक शुरुआत है लेकिन अभी भी Robolectric की शक्ति के साथ तुलनीय नहीं है। एक तीसरा विकल्प भी है, इस उत्तर के नीचे स्क्रॉल करें।
अब, Robolectric के बारे में:
पेशेवरों: यहाँ यह कैसे इकाई परीक्षण में उपयोगी साबित हुई है के बारे में कुछ बिंदु हैं:
आप एक एमुलेटर चलाने की जरूरत नहीं है, तो तुम एमुलेटर या डिवाइस की आवश्यकता के बिना परियोजना के गैर यूआई भागों में से कुछ का परीक्षण कर सकते हैं। यह निरंतर एकीकरण/बिल्ड सर्वर पर चल रहे परीक्षणों पर भी लागू होता है, कोई एमुलेटर उदाहरण लॉन्च होने की आवश्यकता नहीं है।
एंड्रॉइड स्टूडियो के साथ, आप परीक्षण मामलों को पूरा करने के लिए कार्यान्वयन पर काम कर रहे हैं, तो आप जल्दी से एक विशेष परीक्षा कक्षा चला सकते हैं। जब आप कोड लिखते हैं तो आप डीबग कर सकते हैं। यह एक विशाल उत्पादकता लाभ है।
छाया ऑब्जेक्ट्स, यहां तक कि SQLite के रूप में लगभग हर एंड्रॉइड संबंधित चीज़ नकली कर सकते हैं। इसके अलावा प्रत्येक छाया वस्तु कई उपयोगी कार्यों का खुलासा करती है जो उनके सामान्य एंड्रॉइड समकक्षों की पेशकश नहीं करते हैं। एंड्रॉइड ऑब्जेक्ट के छाया समकक्षों के साथ, आप आंतरिक जांच कर सकते हैं या विशेष तरीकों को कॉल कर सकते हैं। जब AsyncTask
रों, Loopers
और Handlers
जैसे बहु थ्रेडेड कोड का परीक्षण आदि तुम भी मुख्य थ्रेड रोक सकते हैं और तेजी से आगे धागा Loopers कर सकते हैं,
सच चमकता है। हैंडलर आधारित कॉलबैक परीक्षण के लिए उत्कृष्ट।
जुनीट 4 प्रारूप समर्थित है। पिछली बार मैंने जांच की है कि एंड्रॉइड अभी भी जुनीट 3 पर है।
नकली गतिविधि उदाहरण निर्माण Robolectric.buildActivity()
और ActivityController
माध्यम से उसके नियंत्रण का समर्थन करता है Mockito, एस्प्रेसो आदि आदि जैसे अन्य परीक्षण उपकरणों के साथ जोड़ा जा सकता है। टुकड़ा/दृश्य हेरफेर भी इस तरह के नकली गतिविधि उदाहरणों पर काम करता है।
अब add-on modules प्रदान किए गए हैं जो मल्टी-डेक्स, वी 4-सपोर्ट, प्ले सेवाएं, मानचित्र और http क्लाइंट को भी कवर करते हैं।तो, अब इन पुस्तकालय कार्यों का उपयोग कर कोड का परीक्षण करना आसान है।
विपक्ष: जहां मैं इसे बहुत अच्छा नहीं पाया:
Robolectric इकाई परीक्षण सहायता में excels, लेकिन सभी कार्यक्षमता कोई वास्तविक उपकरण या एम्युलेटर पेशकश कर सकते हैं कवर नहीं करता। उदाहरण के लिए सेंसर, जीपीएस, ओपन-ग्ला आदि इत्यादि
एकीकरण या यूआई परीक्षण करते समय आपको एक एमुलेटर या असली डिवाइस की आवश्यकता होगी, ताकि गतिविधियां और सेवाएं पूर्ण एंड्रॉइड वातावरण (अन्य ऐप्स, जैसे उपयोग करने के साथ बातचीत कर सकें) अपने ऐप के लिए एक तस्वीर पाने के लिए कैमरा ऐप), सीमित नहीं है। यहां आपको डिफ़ॉल्ट परीक्षण ढांचे का उपयोग करने की आवश्यकता होगी क्योंकि इसमें यूआई का परीक्षण करने के लिए भी कार्य है।
जेएनआई लोडिंग समर्थित नहीं है। तो देशी निर्भरता के साथ कोड का परीक्षण नहीं किया जा सकता है।
अभी तक, रोबॉलेक्ट्रिक के पास Google मानचित्र जार पर काम करने के लिए एक कठिन वायर्ड निर्भरता है। और मैवेन से एक और android.jar डाउनलोड करेगा। इसलिए, प्रोजेक्ट सेटअप को थोड़ा सा टिंकरिंग की आवश्यकता हो सकती है। अपडेट: v3 के रूप में यह बिना किसी झगड़े के ग्रैडल के माध्यम से सभी निर्भरताओं को खींचता प्रतीत होता है।
नए एंड्रॉइड टूल समर्थन कवरेज और रिपोर्ट जनरेशन आदि, लेकिन केवल तभी जब डिवाइस पर परीक्षण चलाया जाता है। तो Robolectric के साथ आपको यह करने के लिए अतिरिक्त ग्रैडल कार्य (Jaococ चलाएं) बनाना होगा। अपडेट: ग्रैडल 2.9 + जैकोको प्लगइन के साथ जहाजों।
चूंकि दोनों ग्रेडल और एंड्रॉइड बिल्ड टूल्स तेजी से नए बिल्ड संस्करणों को शिपिंग कर रहे हैं, स्थिर रोबोलेक्ट्रिक संस्करणों को कभी-कभी बदले गए टूल टूलींग में समस्याएं शुरू हो जाएंगी। अधिकांश सामान्य समस्याओं में शामिल हैं: एसडीके संस्करण असंगत, मैनिफेस्ट नहीं मिला, आउटपुट पथ मिस्चैच, संसाधन लोड नहीं हो रहा है, कॉन्फ़िगरेशन समस्याएं आदि बनाते हैं। कुछ समस्याएं एंड्रॉइड टूल्स में बग से भी संबंधित हैं। कभी-कभी आपको अपना खुद का कस्टम टेस्ट धावक भी लिखना पड़ सकता है या अगले संस्करण तक उन मुद्दों को हल करने तक वर्कअराउंड लागू करना पड़ सकता है। open issues देखें और तदनुसार परीक्षण कॉन्फ़िगर करें। , कोई चौखटे शामिल
एक अन्य विकल्प अपने दम पर बस नकली सामान है। इसका "कठिन तरीका" लेकिन सबसे अनुकूल तरीका है। जेएमॉकिट के साथ इसका सादा जुनीट:
@RunWith(JMockit.class)
public class OtherTest {
public void testHandlerCallback(@Mocked final FragmentTransaction transaction,
@Mocked final FragmentManager manager,
@Mocked final Activity activity,
@Mocked final LayoutInflater inflater,
@Mocked final ViewGroup parent) {
final List<Fragment> fragments = new ArrayList<>();
new Expectations() {{
activity.getFragmentManager(); result = manager;
manager.beginTransaction(); result = transaction;
transaction.add(withCapture(fragments), anyString);
transaction.commit(); result = new Delegate<Void>() {
public int commit() {
View v = fragments.get(0).onCreateView(inflater,parent,null);
Deencapsulation.invoke(v,"onMeasure",0,0);
return 0;
}
};
}};
}
}
ऊपर एक कच्चा और इनलाइन उदाहरण है। आप वास्तव में उचित पुनः उपयोग करने योग्य कक्षाएं बना सकते हैं (FragmentTestHarness
कहें) जो परीक्षण के तहत एक घटक (Fragment
कहें) लें और इसे पूरी तरह अलग वातावरण में लपेटें, इसे परीक्षण के लिए तैयार करें।
स्रोत
2013-08-16 10:54:12
यह बहुत समय पहले पूछा गया था। एंड्रॉइड टेस्ट फ्रेमवर्क रोबोइलेक्ट्रिक से बेहतर है {आज 2017/06 के रूप में]? – Sam