2011-04-29 8 views
7

He escrito que mi proveedor de contenido supuestamente debe ajustar el acceso a 2 tablas en una base de datos SqlLite. Ahora me gustaría escribir algunos casos de prueba, pero nunca lo hice. Después de leer la sección en la guía del desarrollador, debo decir que no logré obtener nada probado.Probar un ContentProvider personalizado en Android

A continuación es mi código hasta ahora. Esta es la única clase en el proyecto de prueba que corresponde a mi proyecto principal. Cuando ejecuto en Eclipse, el emulador se inicia correctamente, los paquetes se instalan pero no se ejecuta la prueba: carrera

La prueba ha fallado: Prueba de funcionamiento incompleta. previstos 1 pruebas, recibieron 0

Aquí es la clase de prueba:

public class ArticleProviderTest extends ProviderTestCase2<ArticleProvider> { 

    static final Uri[] validUris = new Uri[] { Articles.CONTENT_URI, 
     Pictures.CONTENT_URI, 
     Pictures.getContentUriForArticleId(1) }; 

    public ArticleProviderTest(Class<ArticleProvider> providerClass, String providerAuthority) { 
     super(providerClass, providerAuthority); 
    } 

    @Override 
    protected void setUp() throws Exception { 
     super.setUp(); 
    } 

    public void testQuery() { 
     ContentProvider provider = getProvider();  
     for (Uri uri : validUris) { 
      Cursor cursor = provider.query(uri, null, null, null, null); 
      assertNotNull(cursor); 
     }  
    } 
} 

Y el archivo de manifiesto, si ayuda:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
     package="fr.marvinlabs.xxxx" 
     android:versionCode="1" 
     android:versionName="1.0"> 
    <uses-sdk android:minSdkVersion="7" /> 
    <instrumentation android:targetPackage="fr.marvinlabs.xxxx" android:name="android.test.InstrumentationTestRunner" /> 
    <application android:icon="@drawable/icon" android:label="@string/app_name"> 
    <uses-library android:name="android.test.runner" /> 
    </application> 
</manifest> 

Cuando inicio en la configuración de depuración, los puntos de interrupción en el constructor y en la configuración no se activan. ?!

Tampoco encontré mucha información en la red. ¿Alguien podría ayudarme a entender cómo deberían configurarse las pruebas (básicamente, crear un archivo de base de datos de prueba, completarlo con algunos datos, consultarlo, ...)?

Respuesta

7

Entendido. El error fue que no estaba proporcionando el constructor predeterminado para la clase de prueba. Yo había anulado el constructor equivocada:

public ArticleProviderTest(Class<ArticleProvider> providerClass, String providerAuthority) { 
    super(providerClass, providerAuthority); 
} 

es ahora

public ArticleProviderTest() { 
    super(ArticleProvider.class, "com.blah.azerty"); 
} 

02 a.m. es el momento en que no puede leer los documentos del todo bien, por la tarde es mejor :)

2

Debe implementar los métodos setUp() y tearDown() en los que crea y elimina la base de datos.

Este es un gran ejemplo: http://www.google.com/codesearch/p?hl=en#IrmxZtZAa8k/tests/src/com/android/providers/calendar/CalendarProvider2Test.java

+0

No se llama al método setUp de la clase ArticleProviderTest, ni siquiera al constructor. –

+0

He editado la pregunta y he añadido el manifiesto también. ¿Debo configurar algo más que la clase de prueba del proveedor? ¿Alguna actividad también? –

+4

El enlace CalendarProvider2Test.java anterior está roto. Éste parece funcionar: https://android.googlesource.com/platform/packages/providers/CalendarProvider/+/refs/heads/jb-dev/tests/src/com/android/providers/calendar/CalendarProvider2Test.java – treejanitor

3

encontré NotePadProviderTest.java en el El proyecto de ejemplo de NotePad proporcionado por el SDK es un buen comienzo.

Cuestiones relacionadas