0

Я пытаюсь протестировать метод update() моего настраиваемого поставщика контента. Я получаю исключение нулевого указателя из-за вызова метода getContext() в методе update(), равным null. Чтобы облегчить эту проблему, я попытался выполнить Why does AndroidTestCase.getContext().getApplicationContext() return null? безрезультатно. Мой тестовый класс выглядит следующим образом:Провайдер содержимого JUnit Test и null getContext()

метод
public class AddressContentProviderTest extends ProviderTestCase2<AddressContentProvider> { 

    public AddressContentProviderTest() { 
    super(AddressContentProvider.class, AddressContentProvider.class.getName()); 
} 

protected void setUp() throws Exception { 
    super.setUp(); 
} 
    public void testInsert() { 
     Uri CONTENT_URI = Uri.parse("content://" + AddressContentProvider.AUTHORITY + "/address"); 
     AddressContentProvider addressContentProvider = new AddressContentProvider(); 
     ContentValues initialValues = new ContentValues(); 
     boolean isException = false; 
     Uri returnURI = null; 
     initialValues.put("country", "test"); 
     initialValues.put("region", "test"); 
     initialValues.put("city", "test"); 
     initialValues.put("state", "FL"); 
     initialValues.put("zip", "90210"); 
     initialValues.put("province", "test"); 
     initialValues.put("geo_location_id", ""); 

      returnURI = addressContentProvider.insert(CONTENT_URI, initialValues); 

    assertTrue(returnURI != null); 

} 

Вкладыш выглядит следующим образом:

@Override 
    public int update(Uri uri, ContentValues values, String where, String[] whereArgs) { 
      SQLiteDatabase db =dbHelper.getWritableDatabase(); 
      int count; 

      switch (sUriMatcher.match(uri)) { 
      case ADDRESS: 
       count = db.update(ADDRESS_TABLE_NAME, values, where, whereArgs); 
       break; 
      default: 
     throw new IllegalArgumentException("Unknown URI " + uri); 
    } 
    getContext().getContentResolver().notifyChange(uri, null); 
    return count; 
} 

Я бегу моих тестов с использованием Android 2.3.3 на платформе 10.

ответ

0

Так ответ на эту проблему состоял в том, чтобы вызвать getProvider(); метод. Это дает мне доступ к AddressContentProvider в потоке выполнения;

public void testInsert() { 
     Uri CONTENT_URI = Uri.parse("content://" + AddressContentProvider.AUTHORITY + "/address"); 
     AddressContentProvider addressContentProvider = getProvider(); 
     ContentValues initialValues = new ContentValues(); 
    //Uri returnURI = null; 
     initialValues.put("country", "USA"); 
     initialValues.put("region", "test"); 
     initialValues.put("city", "Jacksonville"); 
     initialValues.put("state", "FL"); 
     initialValues.put("zip", "32258"); 
     initialValues.put("province", "test"); 
     initialValues.put("geo_location_id", ""); 
     Uri returnURI = addressContentProvider.insert(CONTENT_URI, initialValues); 
     assertTrue(returnURI != null); 
}