Prueba unitaria – Argument Captor con Mockk | de Indian Singh | octubre 2022

La prueba es una parte esencial del proceso de desarrollo de software. Una prueba de unidad generalmente prueba la funcionalidad de la unidad de código más pequeña posible (que puede ser un método o una clase) de manera repetible. Debe agregar pruebas unitarias cuando necesite validar la lógica de un código específico en su aplicación. El propósito de este artículo es explicar cómo usar Argument Captor. Si desea aprender los conceptos básicos de las pruebas, hay algunos buenos tutoriales disponibles:Nota: En este articulo, burlarse utilizado para simulacros; Los mismos conceptos se aplican también a otras herramientas de simulación. Considere una función que tiene un oyente como getCurrentLocation en el siguiente examen básico. Cada vez que se llama a getCurrentLocation, se debe llamar a addOnSuccessListener, para esto necesitamos usar el argumento captor.

ArgumentCaptor nos permite capturar un argumento pasado a un método para poder inspeccionarlo. Este es especialmente útil cuando no podemos acceder al argumento fuera del método que queremos probar.

Hay dos formas de capturar argumentos: Usando CapturingSlot y usando MutableListOf.CapturingSlot permite capturar solo un valor. En nuestro caso, esto funciona, si tiene varios valores, puede usar MutableListOfUtilice .val = ranura>()every { locationTaskMock.addOnSuccessListener(capture(slot))}respuestas { slot.captured.onSuccess(locationTaskMock.result) locationTaskMock } Esto crea una ranura y un simulacro y establece el comportamiento esperado de la siguiente manera: si se registra la llamada a locationTaskMock.addOnSuccessListener , OnSuccessListener se registra en el espacio locationTaskMock.result. val result = currentLocationCoroutineWrapperImpl.getCurrentLocation(Priority.PRIORITY_HIGH_ACCURACY) Bueno, esta función se puede afirmar fácilmente. Tomemos otro ejemplo donde una función toma un función de orden superior como un argumento como connect(connectionListener: (isConnected: Boolean) -> Unit) Prueba de unidad para la función anterior connect is:every { connectRemote.connect(captureLambda<(isConnected: Boolean) -> Unidad>()) } respuestas { lambda <(isConnected: Boolean) -> Unit>().captured.invoke(true) }De nuevo, si se llama a connectRemote.connect, entonces connectionListener: (isConnected: Boolean) -> Se captura la unidad Lambda y se devuelve verdadero. Luego, highOrderDemo.connect se puede aplicar a viahighOrderDemo.connect hacerse {asserEquals(it, true)}

Deja una respuesta

Tu dirección de correo electrónico no será publicada.