ContentObserver никога не получава обратно извикване onChange по време на тестване на инструментариума?

докато пишех тестове за моя доставчик на съдържание, се натъкнах на странен проблем. Следният код просто се опитва да провери извикване на 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);
    }

Благодаря предварително!


person onlythoughtworks    schedule 15.02.2011    source източник


Отговори (1)


Разреших проблема с използването на инструмент за достъп за моята дейност, за да получа справка за манипулатора. С дефинирания манипулатор ContentObserver получава обратното извикване, както се очаква...

person onlythoughtworks    schedule 26.02.2011
comment
Освен това работи със ServiceTestCase само чрез предаване на getService().getHandler() на наблюдателя. Благодаря много ! - person Timothée Jeannin; 20.11.2012