2011-04-29 13 views
7

मैंने अपने सामग्री प्रदाता को एक SQLLite डेटाबेस में 2 टेबल तक पहुंच लपेटने के लिए लिखा है। अब मैं इसके लिए कुछ टेस्ट केस लिखना चाहता हूं लेकिन मैंने इसे कभी नहीं किया है। डेवलपर मार्गदर्शिका पर अनुभाग पढ़ने के बाद, मुझे यह कहना होगा कि मैंने कुछ भी परीक्षण करने का प्रबंधन नहीं किया है।Android में कस्टम सामग्री प्रदाता का परीक्षण

नीचे मेरा कोड नीचे है। परीक्षण परियोजना में यह एकमात्र वर्ग है जो मेरी मुख्य परियोजना से मेल खाता है। जब मैंने इसे ग्रहण में निष्पादित, एमुलेटर सही ढंग से शुरू होता है, संकुल स्थापित हो, लेकिन यह परीक्षण नहीं चलता है:

टेस्ट रन विफल रहा है: टेस्ट अधूरा चलाते हैं। अपेक्षित 1 परीक्षण,

प्राप्त 0 यहाँ परीक्षण वर्ग है:

public class ArticleProviderTest extends ProviderTestCase2<ArticleProvider> { 

    static final Uri[] validUris = new Uri[] { Articles.CONTENT_URI, 
     Pictures.CONTENT_URI, 
     Pictures.getContentUriForArticleId(1) }; 

    public ArticleProviderTest(Class<ArticleProvider> providerClass, String providerAuthority) { 
     super(providerClass, providerAuthority); 
    } 

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

    public void testQuery() { 
     ContentProvider provider = getProvider();  
     for (Uri uri : validUris) { 
      Cursor cursor = provider.query(uri, null, null, null, null); 
      assertNotNull(cursor); 
     }  
    } 
} 

और मैनिफ़ेस्ट फ़ाइल, अगर यह मदद करता है:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
     package="fr.marvinlabs.xxxx" 
     android:versionCode="1" 
     android:versionName="1.0"> 
    <uses-sdk android:minSdkVersion="7" /> 
    <instrumentation android:targetPackage="fr.marvinlabs.xxxx" android:name="android.test.InstrumentationTestRunner" /> 
    <application android:icon="@drawable/icon" android:label="@string/app_name"> 
    <uses-library android:name="android.test.runner" /> 
    </application> 
</manifest> 

जब मैं डिबग विन्यास में लॉन्च करते हैं, कन्स्ट्रक्टर में ब्रेकपॉइंट्स और सेटअप में ट्रिगर नहीं होता है। ?!

मुझे नेट पर अधिक जानकारी नहीं मिली। क्या कोई मुझे इस बारे में कुछ समझने में मदद कर सकता है कि परीक्षण कैसे स्थापित किया जाना चाहिए (मूल रूप से एक परीक्षण डेटाबेस फ़ाइल बनाएं, इसे कुछ डेटा से भरें, इसे पूछें, ...)?

उत्तर

7

ठीक, हो गया:

यह एक शानदार उदाहरण है। गलती यह थी कि मैं टेस्ट क्लास के लिए डिफॉल्ट कन्स्ट्रक्टर नहीं दे रहा था।

public ArticleProviderTest(Class<ArticleProvider> providerClass, String providerAuthority) { 
    super(providerClass, providerAuthority); 
} 

public ArticleProviderTest() { 
    super(ArticleProvider.class, "com.blah.azerty"); 
} 

2:00 है समय है जब आप डॉक्स पूरी तरह से अच्छी तरह से नहीं पढ़ सकते हैं, दोपहर बेहतर है :)

2

आपको setUp() और tearDown() विधियों को लागू करना चाहिए जिसमें आप डेटाबेस बनाते और हटाते हैं। http://www.google.com/codesearch/p?hl=en#IrmxZtZAa8k/tests/src/com/android/providers/calendar/CalendarProvider2Test.java

+0

ArticleProviderTest क्लास की सेटअप विधि को कन्स्ट्रक्टर भी नहीं कहा जाता है। –

+0

मैंने प्रश्न संपादित किया है और मैनिफेस्ट भी जोड़ा है। क्या मुझे प्रदाता परीक्षण वर्ग की तुलना में कुछ और स्थापित करने की आवश्यकता है? कोई गतिविधि भी? –

+4

उपरोक्त कैलेंडरप्रोवाइडर 2Test.java लिंक टूटा हुआ है। यह काम करने लगता है: https://android.googlesource.com/platform/packages/providers/CalendarProvider/+/refs/heads/jb-dev/tests/src/com/android/providers/calendar/CalendarProvider2Test.java – treejanitor

3

मैं में NotePadProviderTest.java पाया है: मैं गलत निर्माता अधिरोहित था एसडीके द्वारा प्रदान की गई नोटपैड नमूना परियोजना अच्छी शुरुआत होगी।

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