докато пишех тестове за моя доставчик на съдържание, се натъкнах на странен проблем. Следният код просто се опитва да провери извикване на my ContentObserver, когато основните данни се променят. Но обратното извикване на onChange ContentObserverMock никога не се извиква. Също така няма значение дали го пробвам директно на ContentResolver или на курсора. Ето моят тест:
public class TestCursor extends AndroidTestCase {
private class ContentObserverMock extends ContentObserver {
public boolean cursorObserverIsTriggered = false;
/**
* @param handler
*/
public ContentObserverMock(Handler handler) {
super(handler);
}
@Override
public boolean deliverSelfNotifications() {
return true;
}
/**
* {@inheritDoc}
*/
@Override
public void onChange(boolean selfChange) {
Log.d(TestCursor.TAG, "ONCHANGE is called");
cursorObserverIsTriggered = true;
super.onChange(selfChange);
}
}
private final static String TAG = TestCursor.class.getSimpleName();
/**
* {@inheritDoc}
*/
@Override
protected void setUp() throws Exception {
super.setUp();
Globals.setApplicationContext(getContext());
DummyDataDB.insertDummyDataIntoDB();
}
/**
* {@inheritDoc}
*/
@Override
protected void tearDown() throws Exception {
super.tearDown();
DummyDataDB.clearDB();
}
@SmallTest
public void testContentResolver() {
ContentResolver resolver = getContext().getContentResolver();
Uri uri = MyContentProvider.CONTENT_URI;
Handler handler = new Handler();
ContentObserverMock contentObserver = new ContentObserverMock(handler);
resolver.registerContentObserver(uri, true, contentObserver);
Cursor cursor = resolver.query(uri, null, null, null, null);
Assert.assertNotNull(cursor);
int count = cursor.getCount();
DomainObject contentStub = StubFactory.createContentStub();
ContentValues cv = HelperDomainObjectToContentValues.contentValuesFor(contentStub );
resolver.insert(uri, cv);
cursor = resolver.query(uri, null, null, null, null);
Assert.assertEquals(count, (cursor.getCount() - 1));
Assert.assertEquals(true, contentObserver.cursorObserverIsTriggered);
}
@SmallTest
public void testCursor() {
Log.d(TestCursor.TAG, "testCursor()");
DbHelper dbHelper = new DbHelper(getContext());
Cursor cursor = dbHelper.selectAllDomainObjects();
Handler handler = new Handler();
ContentObserverMock contentObserver = new ContentObserverMock(handler);
Log.d(TestCursor.TAG, "registerContentObserver()");
cursor.registerContentObserver(contentObserver);
DomainObject contentStub = StubFactory.createContentStub();
ContentValues cv = HelperDomainObjectToContentValues.contentValuesFor(contentStub );
dbHelper.writeDOmainObject(contentValues);
Log.d(TestCursor.TAG, "cursor Requery()");
cursor.requery();
Assert.assertEquals(true, contentObserver.cursorObserverIsTriggered);
}
Благодаря предварително!