Я начал писать простой тест для своего поставщика контента. Проблема в том, что когда я запускаю тест, он использует производственные данные. Как я могу убедиться, что отдельные данные теста используются из моих данных в реальном времени?Тестирование ContentProvider - разделение производственных и тестовых данных
@RunWith(AndroidJUnit4.class)
public class MyContentProviderTest extends ProviderTestCase2<MyContentProvider>{
public MyContentProviderTest() {
super(MyContentProvider.class, MyContentProvider.AUTHORITY);
}
@Override
protected void setUp() throws Exception {
setContext(InstrumentationRegistry.getContext());
//have also tried with setContext(InstrumentationRegistry.getTargetContext());
super.setUp();
}
@Test
public void insertTest(){
ContentResolver contentResolver = getContext().getContentResolver();
assertNotNull(contentResolver);
contentResolver.insert(MyContentProvider.uri,createContentValues());
Cursor cursor = contentResolver.query(MyContentProvider.uri, Database.ALL_COLUMNS,
null, null, null);
assertNotNull(cursor);
// the test fails here because along with the row inserted above, there are also many more rows of data from using my app normally (not while under test).
assertEquals(1, cursor.getCount());
//todo: verify cursor contents
cursor.close();
}
ContentValues createContentValues(){
ContentValues cv = new ContentValues();
cv.put(Database.COLUMN_DATETIME, LocalDateTime.now().format(Util.DATE_FORMAT));
/* ... etc */
return cv;
}
}
У меня нет того, что вы пытаетесь архивировать? .. Могли бы вы сказать, что делать и что они делают? – creativecreatorormaybenot
Является ли 'MyContentProvider.uri' настоящей продукцией' Uri'? – CommonsWare
@CommonsWare, да. Я использую его как переменную-член MyContentProvider, должен ли я использовать другой URI? – Stephen