2015-06-16 26 views
5

Bir ContentProvider sınıfını test etmeye çalışıyorum ve çalışmasını sağlayamıyorum.ProviderTestCase2.getProvider() is sıfır

getprovider() boş dönen devam ediyor, ama ben ProviderTestCase2.setUp() koddan anladığım kadarıyla, bu olmamalıdır.

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(); 
    } 
} 

Yan not: uygulama içinde kullanıldığında sağlayıcı çalışır.

Şimdiden teşekkürler.

+0

her zamanki sorgu, insert ... sağlayıcı yöntemlerin yanında sizin sağlayıcı bir şey eklediniz mi? – Luksprog

+0

nop, hiçbir şey garip – Cheborra

+0

Birkaç farklı APi seviyesini, cihazı vs. denediniz mi? –

cevap

1

setUp() yönteminin bir parçası olarak, bir MockContentResolver oluşturulmalıdır. Sağlayıcıyı oluşturmak ve enjekte etmek için bunu kullanın.

bakınız sınıf MockContentResolver: Örnek http://developer.android.com/reference/android/test/mock/MockContentProvider.html

Kaynak:

@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

budur aynen benim açımdan, ProviderTestCase2.setUp eğer() zaten bir MockcontentResolver, neden bir çocuk sınıfta kendi oluşturmalıdır yaratır? – Cheborra

17

Kendimi bu konuda koştu: Yukarıdaki linkte örnekten http://alvinalexander.com/java/jwarehouse/android/test-runner/src/android/test/ProviderTestCase2.java.shtml

Kısmi örnek. AndroidJUnit4 ürününe @Before ek açıklama ile setUp yöntemini çalıştırması gerektiğini söylemeniz gerekir. Bunu yapmazsanız, birim test çalışmalarınızdan önce setUp metodu aranmayacaktır.

http://developer.android.com/training/testing/integration-testing/content-provider-testing.html'da setUp yöntemini geçersiz kılmak için kod pasajı yanıltıcıdır ve @Before ek açıklamaya ihtiyacınız olduğunu belirtmez.

deneyin:

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

Çok yardımcı oldu, teşekkürler! neden onlar asla 'setUp' aradığınız - – Magillus

+0

Bu bir hata gibi görünüyor? –