Prueba de la clase de comunicación con DB a través de DAO de ORMLite

Estoy intentando adoptar un enfoque TDD al crear una aplicación para Android. Estoy usando ORMLite y Mockito / Robolectric para probar. Me he encontrado con problemas para probar una cosa sencilla:

(Método en alguna clase que envuelve las llamadas DAO)

public List<ITask> getTasksForNextTwoWeeks() throws SQLException { // Code to be written } 

Bueno, el código interior será sólo una llamada de método de consulta adecuada.

¿Cuál es el mejor método para probar ese código? He estado pensando en esto, pero no puedo pensar en la solución sin tener acceso a la base de datos real (ya sea real o una prueba).

Cualquier sugerencia bienvenida.

Hrm. Depende un poco de cómo está creando su clase Dao. Bajo ORMLite , la clase Dao es una interfaz que significa que con un poco de cableado, debe ser capaz de inyectar un DAO burlado y sólo manejar las llamadas de consulta a través de la simulación.

Por ejemplo, podría tener un método setDao en su clase de envoltura sorta como esto:

 public void setDao(Dao<ITask, String> dao) { this.dao = dao; } private Dao<ITask, String> getDao() { if (dao != null) { // typical ORMLite pattern dao = getHelper().getITaskDao(); } return dao; } 

Entonces su método getTasksForNextTwoWeeks() haría algo como:

 public List<ITask> getTasksForNextTwoWeeks() throws SQLException { QueryBuilder<ITask, String> qb = getDao().getQueryBuilder(); qb.where().gt(...); return qb.query(); } 

Pero esto requiere un buen poco de burla para obtener el QueryBuilder .

Lo que hacemos es extender la interfaz ORMLIte Dao y añadir métodos como getTasksForNextTwoWeeks() a la clase ITaskDao .

 public interface ITaskDao extends Dao<ITask, String> { public List<ITask> getTasksForNextTwoWeeks() throws SQLException; ... } 

A continuación, puede burlar fácilmente el ITaskDao y omitir todas las operaciones de base de datos.

Espero que esto ayude.

No soy fan de la respuesta de Gray, ya que hace las cosas un poco demasiado complicadas. Le recomiendo simplemente crear en la memoria de la base de datos en su lugar, pasando null como un nombre de base de datos:

 OrmLiteSqliteOpenHelper(context,null, null, DATABASE_VERSION ); 

De esta manera puede probar sus consultas en una sola prueba mediante a) añadir elementos simulados b) probar si su SqliteOpenHelper -wrapper devuelve resultados correctos

Cada prueba como esa es completamente independiente de su base de datos actual y otras pruebas en su suite.

  • Pruebas de instrumentación Android con Mockito
  • Cómo probar interfaz de escucha se llama dentro de pruebas de unidad de Android
  • Android instrumentación prueba java.lang.UnsatisfiedLinkError en el uso de AndroidJunitRunner y AndroidJUnit4
  • NoClassDefFoundError al intentar ejecutar pruebas unitarias en Android Studio
  • JUnit en android
  • Cómo escribir una prueba de unidad para un controlador de excepción de subprocesos no detectados.
  • ¿Cómo puedo probar el código de Android que tenga View Animators?
  • Prueba de DialogFragments con Robolectric
  • ¿Cómo probar en robolectric si abrí un fragmento en el botón de clic?
  • Robolectric's Shadow Object y Mocking
  • La clase de prueba de Android falla al compilar en eclipse con error de "falta de coincidencia vinculada"
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.