ProviderTestCase2.getProvider () - null

I am trying to test the ContentProvider class and cannot make it work.

getProvider () returns null, but, as I understand from the code ProviderTestCase2.setUp (), it should not.

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

Side note: the provider works if it is used in the application.

Thanks in advance.

+5
source share
2 answers

I myself came across this question. You must say AndroidJUnit4 to run the setUp method with @Before annotation. If you do not, the setUp method will not be called until the unit test is run.

The code snippet for overriding the setUp method at http://developer.android.com/training/testing/integration-testing/content-provider-testing.html is misleading and does not mention that you need the @Before annotation.

Try the following:

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

As part of the setUp () method, you need to create a MockContentResolver. Use this to create and enter a provider.

See the MockContentResolver class: http://developer.android.com/reference/android/test/mock/MockContentProvider.html

Example source: http://alvinalexander.com/java/jwarehouse/android/test-runner/src/android/test/ProviderTestCase2.java.shtml

A partial example from the example in the link above:

  @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()); } 
+1
source

All Articles