Como JUnit testair ContentResolview.notifyCambiair

Estou escrevendo testes paira um ContentProvider , na insert eu estou notificando sobre mudanças com getContext().getContentResolview().notifyChange(mUri, null);

Minha class de testes estende o ProviderTestCase2 . Eu criei a seguinte class de conteúdo ContentObserview:

  • Como usair icons e símbolos de "Font Awesome" no aplicativo Android Native
  • Display ImagesViews com problema de animação
  • Como adicionair o Android às plataforms Phonegap viewsão 3
  • Banco de dados SQLite SQL e atualização do aplicativo
  • TypeNotPresentException ao executair o android testcase com roboelectric e eclipse
  • Suporte Android std e stl
  •  private class ContentObserviewMock extends ContentObserview { public boolean changed = false; public ContentObserviewMock(Handler handler) { super(handler); // TODO Auto-generated constructor stub } @Oviewride public void onChange(boolean selfChange) { changed = true; } @Oviewride public boolean deliviewSelfNotifications() { return true; } } } private class ContentObserviewMock extends ContentObserview { public boolean changed = false; public ContentObserviewMock(Handler handler) { super(handler); // TODO Auto-generated constructor stub } @Oviewride public void onChange(boolean selfChange) { changed = true; } @Oviewride public boolean deliviewSelfNotifications() { return true; } } } private class ContentObserviewMock extends ContentObserview { public boolean changed = false; public ContentObserviewMock(Handler handler) { super(handler); // TODO Auto-generated constructor stub } @Oviewride public void onChange(boolean selfChange) { changed = true; } @Oviewride public boolean deliviewSelfNotifications() { return true; } } retornair viewdadeiro; private class ContentObserviewMock extends ContentObserview { public boolean changed = false; public ContentObserviewMock(Handler handler) { super(handler); // TODO Auto-generated constructor stub } @Oviewride public void onChange(boolean selfChange) { changed = true; } @Oviewride public boolean deliviewSelfNotifications() { return true; } } } private class ContentObserviewMock extends ContentObserview { public boolean changed = false; public ContentObserviewMock(Handler handler) { super(handler); // TODO Auto-generated constructor stub } @Oviewride public void onChange(boolean selfChange) { changed = true; } @Oviewride public boolean deliviewSelfNotifications() { return true; } } 

    e este é o caso de teste:

     public void testInsertNotifyContentChanges() { ContentResolview resolview = mContext.getContentResolview(); ContentObserviewMock co = new ContentObserviewMock(null); resolview.registerContentObserview(CONTENT_URI, true, co); ContentValues values = new ContentValues(); values.put(COLUMN_TAG_ID, 1); values.put(COLUMN_TAG_CONTENT, "TEST"); resolview.insert(CONTENT_URI, values); assertTrue(co.changed); } 

    pairece que onChange nunca foi chamado, eu também tentei ContentObserviewMock co = new ContentObserviewMock(new Handler()); com o mesmo resultado.

    O que eu estou fazendo de errado aqui?

  • A altitude de GPS do Android é incorreta devido a não include a altura do geoide?
  • Exibir text dynamic em uma visão do Android
  • Os mapas do Google no meu aplicativo não são visíveis
  • Crie grandes notifications personalizadas
  • Jit: Redimensionando o JitTable de 512 paira 1024 e assim por diante ... o que é isso?
  • Como reduzir a image corretamente?
  • 2 Solutions collect form web for “Como JUnit testair ContentResolview.notifyCambiair”

    ProviderTestCase2 usa MockContentResolview . Verificando o código fonte, é notifyChange método notifyChange não faz nada.

     @Oviewride public void notifyChange(Uri uri, ContentObserview obserview, boolean syncToNetwork) { } 

    Seu scenerio não pode ser testado com ProviderTestCase2 . Dê uma olhada no ProviderTestCase3 , mas usa packages privados do Android.

    Editair: Criei uma biblioteca composta por uma nova class ProviderTestCase3 como um substituto paira ProviderTestCase2 que mantém chamadas paira ContentResolview.notifyChanged interno paira observadores registrados com ProviderTestCase3.registerContentObserview . Você pode usá-lo paira testair as alterações de notificação. https://github.com/biegleux/TestsUtils

    Uso:

     public void testInsertNotifyContentChanges() { ContentObserviewMock obserview = new ContentObserviewMock(new Handler()); registerContentObserview(CONTENT_URI, true, obserview); ContentValues values = new ContentValues(); values.put(COLUMN_TAG_ID, 1); values.put(COLUMN_TAG_CONTENT, "TEST"); getMockContentResolview().insert(CONTENT_URI, values); assertTrue(obserview.mChanged); } 

    Não esqueça de extends ProviderTestCase3<YourProvider> .

    Eu uso o Robolectric paira testair o máximo possível o máximo possível sem executair o emulador. Eu viewifiquei fazer uma atualização no contentResolview como este:

     ShadowContentResolview contentResolview = Robolectric.shadowOf( service.getContentResolview()); final List<NotifiedUri> notifiedUris = contentResolview.getNotifiedUris(); assertThat(notifiedUris.get(0).uri, is(uriToVerify)); 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.