2015-06-16 4 views
5

है मैं एक सामग्री प्रदाता वर्ग का परीक्षण करने की कोशिश कर रहा हूं, और इसे काम नहीं कर सकता।ProviderTestCase2.getProvider() शून्य

getProvider() शून्य लौटता रहता है, लेकिन जैसा कि मैं ProviderTestCase2.setUp() कोड से समझता हूं, यह नहीं होना चाहिए।

public class NotesProviderTest extends ProviderTestCase2<NotesProvider> 
{ 
    ... 

    public NotesProviderTest() 
    { 
     super(NotesProvider.class, Contract.AUTHORITY); 
    } 

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

    } 

    public void testNoteProvider__inserts_a_valid_record() throws Exception 
    { 
     Note note = new Note(new JSONObject(simpleNoteJson)); 

     NotesProvider provider = getProvider(); 

     Uri insert = provider.insert(Note.URI, note.getContentValues()); 
     assertEquals(1L, ContentUris.parseId(insert)); 

     Cursor cursor = provider.query(Note.URI, null, null, new String[]{}, null); 

     assertNotNull(cursor); 

     cursor.close(); 
    } 
} 

साइड नोट: प्रदाता कार्य करता है यदि ऐप के भीतर उपयोग किया जाता है।

अग्रिम धन्यवाद।

+0

आप हमेशा की तरह क्वेरी, सम्मिलित ... प्रदाता तरीकों के अलावा अपने प्रदाता के लिए कुछ भी किया है? – Luksprog

+0

एनओपी, अजीब कुछ नहीं – Cheborra

+0

क्या आपने कई अलग-अलग एपीआई स्तर, डिवाइस इत्यादि की कोशिश की है? –

उत्तर

1

setUp() विधि के हिस्से के रूप में एक MockContentResolver बनाया जाना चाहिए। प्रदाता बनाने और इंजेक्ट करने के लिए इसका इस्तेमाल करें।

देखें वर्ग MockContentResolver: http://developer.android.com/reference/android/test/mock/MockContentProvider.html

उदाहरण के स्रोत:

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

     mResolver = new MockContentResolver(); 
     final String filenamePrefix = "test."; 
     RenamingDelegatingContext targetContextWrapper = new RenamingDelegatingContext(
       new MockContext2(), // The context that most methods are delegated to 
       getContext(), // The context that file methods are delegated to 
       filenamePrefix); 
     mProviderContext = new IsolatedContext(mResolver, targetContextWrapper); 

     mProvider = mProviderClass.newInstance(); 
     mProvider.attachInfo(mProviderContext, null); 
     assertNotNull(mProvider); 
     mResolver.addProvider(mProviderAuthority, getProvider()); 
    } 
+4

यह बिल्कुल मेरा मुद्दा है, अगर ProviderTestCase2.setUp() पहले से ही एक मॉककंटेंट रीसोलवर बनाता है, तो मुझे अपने बच्चे को कक्षा में क्यों बनाना चाहिए? – Cheborra

17

मैं सिर्फ अपने आप को इस मुद्दे में भाग: http://alvinalexander.com/java/jwarehouse/android/test-runner/src/android/test/ProviderTestCase2.java.shtml

आंशिक ऊपर के लिंक में उदाहरण से नमूना। @Nforefore एनोटेशन के साथ सेटअप विधि को चलाने के लिए आपको AndroidJUnit4 को बताना होगा। यदि आप ऐसा नहीं करते हैं तो आपके यूनिट परीक्षण चलाने से पहले सेटअप विधि नहीं कहा जाएगा।

http://developer.android.com/training/testing/integration-testing/content-provider-testing.html पर सेटअप विधि को ओवरराइड करने के लिए कोड स्निपेट भ्रामक है और यह उल्लेख नहीं करता है कि आपको एनोटेशन से पहले @ आवश्यकता है।

प्रयास करें निम्नलिखित:

@Before 
@Override 
public void setUp() throws Exception 
{ 
    setContext(InstrumentationRegistry.getTargetContext()); 
    super.setUp(); 
} 
+0

यह बहुत उपयोगी था, धन्यवाद! – Magillus

+0

यह एक गलती की तरह दिखता है - वे 'सेटअप' क्यों नहीं बुला रहे हैं? –

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