Prueba de Android JUnit para SQLiteOpenHelper
Soy nuevo en junit testing.
¿Puede alguien ayudarme, cómo probar mi clase SQLiteOpenHelper
.
- Actualizar tabla Sqlite si campo de cadena comienza con signo más (+)?
- Cómo ocultar filas específicas de un cursor en android
- Importar archivo .csv a Sqlite en Android
- IllegalStateException: obtiene la ranura de campo de la fila 0 col -1 falló
- No se puede degradar la base de datos de la versión 2 a 1 incluso después de una nueva instalación y volver a ejecutar
Significa qué clases tengo que implementar y cómo probar mi base de datos y tablas. Estoy utilizando Eclipse IDE.
- Excepción no manipulada org.json.jsonexception
- Cursor finalizado sin cerrar antes () Android
- ¿Preguntas con declaraciones preparadas en Android?
- Malo rendimiento de SQLite en almacenamiento externo en Android
- getApplicationContext () devuelve null, pero funciona en otras actividades
- Android Cursor? Cómo leer datos de objetos?
- java.lang.NumberFormatException: Invalid int: "null"
- Android usando SQLCipher - ¿cómo se puede descifrar?
Desde el nivel 24 de API, RenamingDelegatingContext
está obsoleto. Otro hilo sugiere utilizar Robolectric 's RuntimeEnvironment.application
como se describe en este artículo Medium .
Respuesta antigua para referencia:
Para un DatabaseHandler simple:
public class MyDatabase extends SQLiteOpenHelper { private static final String DATABASE_NAME = "database.db"; private static final int DATABASE_VERSION = 1; public MyDatabase(Context context){ super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db){ // some code } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // some code } }
He creado un AndroidTestCase:
public class DatabaseTest extends AndroidTestCase { private MyDatabase db; @Override public void setUp() throws Exception { super.setUp(); RenamingDelegatingContext context = new RenamingDelegatingContext(getContext(), "test_"); db = new MyDatabase(context); } @Override public void tearDown() throws Exception { db.close(); super.tearDown(); } //According to Zainodis annotation only for legacy and not valid with gradle>1.1: //@Test public void testAddEntry(){ // Here i have my new database wich is not connected to the standard database of the App } }
Usted puede escribir la prueba de la base de datos del androide en el estilo de JUnit4 también. Sólo tiene que agregar la siguiente dependencia en su base de datos
androidTestCompile('com.android.support.test:runner:0.3'){ exclude group: 'com.android.support', module: 'support-annotations' }
Y marque la clase Prueba de la siguiente manera
@RunWith(AndroidJUnit4.class) public class DatabaseTest { @Test public void myFirstTest(){ //your test } }
RenamingDelegatingContext ahora está obsoleto en v24. Utilice Robolectric para probar. Un ejemplo (en Kotlin) como abajo
@RunWith(RobolectricGradleTestRunner::class) @Config(constants = BuildConfig::class, sdk = intArrayOf(LOLLIPOP), packageName = "com.elyeproj.simpledb") class ExampleUnitTest { lateinit var dbHelper: DbHelper // This is your SQLOpenHelper class @Before fun setup() { dbHelper = DbHelper(RuntimeEnvironment.application) // Your new context from Robolectric dbHelper.clearDbAndRecreate() // A function just to clear and recreate DB } @Test @Throws(Exception::class) fun testDbInsertion() { // Given val testStr1 = "testing" val testStr2 = "testing" // When dbHelper.insertText(testStr1) dbHelper.insertText(testStr2) // Then assertEquals(dbHelper.getAllText(), "$testStr1-$testStr2-") } @After fun tearDown() { dbHelper.clearDb() // A function just to clear the DB } }
Puede obtener toda la fuente del proyecto desde https://github.com/elye/demo_simpledb_test
Puede obtener la elaboración de https://medium.com/@elye.project/android-sqlite-database-unit-testing-is-easy-a09994701162#.s44tity8x
Esta pregunta es muy abstracta. Le recomiendo que lea la Guía de pruebas de Android. Tiene algunos ejemplos sencillos de probar las aplicaciones de Android.
Biblioteca de soporte para pruebas de Android
Entrenamiento de pruebas de Android
Sin saber su código, supongo que su SQLiteOpenHelper es utilizado por una actividad o servicio. Creo que este Actividades / Servicios es que debe probar.
Un buen comienzo debe ser ActivityInstrumentationTestCase2 para una actividad o ServiceTestCase para un servicio.
Espero que ayude.
- Mocking biblioteca / marco que funciona mejor en Android?
- Demasiado nueva versión para Android google play