यह वास्तव में ऐसा लगता है कि कुछ जादू चल रहा है और मुझे यह समझने में दिलचस्पी है कि ऐसा क्यों होता है :)

मेरे पास यूनिट-टेस्ट है:

public class SelectThemeActivityTest 
    extends ActivityInstrumentationTestCase2<SelectThemeActivity> {

    private final static int[] STATIC_ARRAY = { 0, 1, 2 };

    public SelectThemeActivityTest() {
        super("com.the7art.simplewallpaper", SelectThemeActivity.class);
    }

    @Override
    protected void setUp() throws Exception {
        super.setUp();
        // some array usage here - will throw NullPointerEcxeption on second test
        // see description below
        STATIC_ARRAY[0] = 2;
    }

    @Override
    protected void tearDown() throws Exception {
        super.tearDown();
    }

    public void testFirst() {

    }
    public void testSecond() {

    }
    public void testThird() {

    }
}

यदि मैं इस परीक्षण मामले को चलाता हूं तो पहला परीक्षण सफलतापूर्वक पूरा होता है और बाकी सभी NullPointerException को setUp() से फेंक कर विफल हो जाते हैं - वह पंक्ति जो करने का प्रयास करती है STATIC_ARRAY तक पहुंचें।

जो बात मुझे और भी अधिक परेशान करती है, वह यह है कि यदि मैं ActivityInstrumentationTestCase2 के बजाय AndroidTestCase को बढ़ाने के लिए परीक्षण केस को बदलता हूं, तो सभी परीक्षण सफलतापूर्वक पूर्ण होते हैं! जादू! :-)

साथ ही यदि मैं STATIC_ARRAY से 'स्थिर' कीवर्ड हटा दूं, तो परीक्षण भी सफल हो जाते हैं।

तो यह स्पष्ट है कि कुछ परीक्षण रन के बीच इसे शून्य बनाकर मेरे STATIC_ARRAY को संशोधित कर रहा है, संभवतः tearDown() में और कुछ को ActivityInstrumentationTestCase2< के साथ करना है /em>, लेकिन उस कुछ को कैसे ट्रैक करें? :-) कोई विचार?

3
dimsuz 9 जुलाई 2011, 15:08
आपका वास्तविक कोड बहुत अलग दिख सकता है, लेकिन आपके नमूने से, आपको केवल setUp() में अपनी सरणी बनानी चाहिए।
 – 
idbrii
16 जुलाई 2011, 05:12
नहीं, मैंने सटीक परीक्षण पोस्ट किया है जैसे मेरे पास ग्रहण में है :) हां, मुझे लगता है कि मैं इसे सेटअप() में बना सकता हूं, या जैसा कि मैंने कहा था कि इसे 'स्थैतिक' कीवर्ड को हटाकर ठीक करें, लेकिन मैं इसे खोजने के लिए उत्सुक हूं इस अजीब व्यवहार का कारण क्या है :)
 – 
dimsuz
16 जुलाई 2011, 09:36
@dpimka, एंड्रॉइड (2.2 एमुलेटर) पर गतिविधि इंस्ट्रुमेंटेशन टेस्टकेस 2 जूनिट्स के साथ एक ही समस्या का सामना करना पड़ा - स्थिर फ़ील्ड साफ़ हो गए हैं, क्या आपको इसका कारण मिला? ) ऐसा लगता है जैसे super.tearDown () में कुछ जादू एंड्रॉइड विशिष्ट कोड है ...
 – 
yetanothercoder
7 फरवरी 2012, 12:01

2 जवाब

सबसे बढ़िया उत्तर

इसका कारण है स्क्रबक्लास () विधि जिसे super.tearDown(): google- समूह चर्चा. एक समाधान है - इस पद्धति को ओवरराइड करना ए>।

3
yetanothercoder 7 फरवरी 2012, 23:02

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

1
Cedric Beust 9 जुलाई 2011, 23:42
मेरा कोड बिल्कुल जैसा मैंने पोस्ट किया है। वॉचपॉइंट के साथ प्रयास करेंगे, अब तक उनका उपयोग कभी नहीं किया, आशा है कि यह एंड्रॉइड टेस्टकेस के साथ संभव है;)
 – 
dimsuz
16 जुलाई 2011, 09:37