es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

finge una llamada de devolución de referencia de base de datos con Mockito

Estoy intentando probar la referencia a la base de datos al recuperar información básica del usuario, intenté simular las referencias a la base de datos y aplicar lógica de Mockito en ella, pero por alguna razón no está funcionando, la prueba está fallando. Soy nuevo en Mockito, si alguien pudiera ayudarme, gracias. ¿Podrías mostrarme cómo simular addValueEventListener con Mockito?

Este es mi código:

ServiceLocator
       .db_reference
       .child("Users")
       .child(ServiceLocator.auth.currentUser!!.uid)
       .addListenerForSingleValueEvent(object  : ValueEventListener {
           override fun onDataChange(snapshot: DataSnapshot) {
               if(snapshot.exists()){
                  //obteniendo datos
               }
           }

           override fun onCancelled(error: DatabaseError) {

           }
   })

Este es el código de prueba:

@Test
fun h_testCaseGetUserInfoFromDB(){
    val firebaseMock = mock(FirebaseAuth::class.java)
    val databaseMock = mock(DatabaseReference::class.java)

    ServiceLocator.auth = firebaseMock
    ServiceLocator.db_reference = databaseMock

    `when`(databaseMock.child("Users").child(firebaseMock.currentUser!!.uid).get()).thenReturn(
    isNotNull())

}
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para burlar addValuelistener con Mockito, puedes usar el siguiente código:

    @Test
    fun h_testCaseGetUserInfoFromDB(){
        val firebaseMock = mock(FirebaseAuth::class.java)
        val databaseMock = mock(DatabaseReference::class.java)
        val snapshotMock = mock(DataSnapshot::class.java)
    
        ServiceLocator.auth = firebaseMock
        ServiceLocator.db_reference = databaseMock
    
        `when`(firebaseMock.currentUser!!.uid).thenReturn("test_id")
        `when`(databaseMock.child("Users").child("test_id")).thenReturn(databaseMock)
        doAnswer {
            val listener = it.arguments[0] as ValueEventListener
            listener.onDataChange(snapshotMock)
        }.`when`(databaseMock).addListenerForSingleValueEvent(any())
    
        // Realizar aserción o verificación del objeto snapshotMock
    
    }
    

    En este código, primero creamos las burlas necesarias para FirebaseAuth, DatabaseReference y DataSnapshot requeridos para las pruebas. Luego, establecemos las burlas para ServiceLocator.auth y ServiceLocator.db_reference con estos objetos simulados.

    A continuación, usamos el método doAnswer de Mockito para interceptar la llamada a addListenerForSingleValueEvent() y ejecutar nuestra propia implementación del método onDataChange() del listener. Esto nos permite simular el comportamiento de la referencia de la base de datos y devolver nuestros datos simulados con fines de prueba.

    Finalmente, podemos realizar aserciones o verificaciones en el objeto DataSnapshot simulado para asegurarnos de que se haya recuperado los datos correctos de la referencia de la base de datos simulada.

Comments are closed.