2014-07-09 11 views
6

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

यदि मैं एक जुनीट परीक्षण के रूप में चलाने की कोशिश करता हूं, तो मैंने !!! JUnit version 3.8 or later expected जुनीट संस्करण समस्या को मारा। यह answer बताता है कि उस समस्या को कैसे हल किया जाए। दुर्भाग्य से, मैंने java.lang.NoClassDefFoundError: junit/textui/ResultPrinter पर हिट किया, जिसे मैं ठीक नहीं कर सकता।

फिर मैंने अपने जुनीट परीक्षणों को एक अलग जावा मॉड्यूल में स्थानांतरित करने का प्रयास किया जो एंड्रॉइड मॉड्यूल पर निर्भर करता है। सब कुछ ठीक संकलित करता है। मैंने जुनीट परीक्षण (: MyJUnitTests: test) लॉन्च करने के लिए एक नई कॉन्फ़िगरेशन जोड़ा, लेकिन परीक्षण package com.myproject.util does not exist के साथ विफल हो गए। ऐसा लगता है कि क्लासपाथ निर्भर एंड्रॉइड मॉड्यूल से कक्षाओं को शामिल नहीं कर रहा है।

क्या कोई इस क्लासपाथ मुद्दे को ठीक करने का तरीका जानता है? मैंने बहुत से संबंधित उत्तरों को देखा है और उनमें से कोई भी मेरे लिए काम नहीं कर रहा है। या क्या यह मेरे एक मॉड्यूल में अपने जुनीट परीक्षणों को रखने और रखने का एक बुरा विचार है?

मैं तेजी से दौड़ने के लिए जुनीट परीक्षण प्राप्त कर सकता हूं और यदि मैं अपने सादे जावा कक्षाओं और उनके जुनीट परीक्षणों को पूरी तरह से अलग मॉड्यूल (उदा। here) में स्थानांतरित करता हूं, और निर्भरता को उलट देता हूं तो एंड्रॉइड मॉड्यूल जावा मॉड्यूल पर निर्भर करता है। क्या वह पसंदीदा समाधान है?

उत्तर

8

मूल समस्या यह है कि एंड्रॉइड फ्रेमवर्क कक्षाएं एंड्रॉइड ओएस के संदर्भ के बाहर अच्छी तरह से काम नहीं करती हैं, इसलिए फ्रेमवर्क कक्षाओं पर निर्भरता वाले किसी भी कोड को नियमित जुनीट वातावरण में नहीं चलाया जाता है, जैसा आपने पाया है।

जुनीट परीक्षणों को एक अलग मॉड्यूल में स्थानांतरित करने का प्रयास करने का आपका समाधान काम नहीं करेगा क्योंकि आपके पास एक सादा जावा मॉड्यूल एक एंड्रॉइड मॉड्यूल पर निर्भर नहीं हो सकता है। एंड्रॉइड ग्रैडल मॉड्यूल जावा मॉड्यूल की तरह कार्य नहीं करते हैं, क्योंकि एंड्रॉइड बिल्ड अधिक जटिल होते हैं, और क्योंकि एंड्रॉइड मॉड्यूल बिल्ड का अंतिम परिणाम एपीके या एएआर होगा, जो अन्य मॉड्यूल प्रकार समझ नहीं पाएंगे।

यदि आप अपने सादे जावा कक्षाओं और यूनिट परीक्षणों को सादे जावा मॉड्यूल में ले जा सकते हैं और एंड्रॉइड मॉड्यूल उस पर निर्भर करते हैं, तो यह सबसे अच्छा तरीका होगा जो आईडीई में आधिकारिक विशेषताओं से सबसे अधिक समर्थन प्राप्त करेगा। इसमें एक आर्किटेक्चरल लाभ भी होगा जिसमें यह उन वर्गों को एंड्रॉइड एब्स्ट्रैक्शन से मुक्त रखेगा, जिससे इसे और अधिक पोर्टेबल बना दिया जा सकेगा, और यूआई या स्टोरेज या अन्य चीजों से अधिक विशिष्ट डिवाइस-विशिष्ट से व्यवसाय तर्क को अलग किया जा सकेगा।

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

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