【发布时间】:2011-02-15 17:50:39
【问题描述】:
在为我的内容提供商编写测试时,我偶然发现了一个奇怪的问题。以下代码只是尝试在基础数据更改时验证对我的 ContentObserver 的调用。但是 onChange 回调 ContentObserverMock 永远不会被调用。如果我直接在 ContentResolver 或 Cursor 上尝试它也没有什么区别。这是我的测试:
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);
}
提前致谢!
【问题讨论】:
标签: android database android-contentprovider instrumentation