Slide 1

Slide 1 text

Tests unitarios con MockK Kotlin Nights - Testing edition

Slide 2

Slide 2 text

Sobre mí ● Facundo Rodríguez Arceri ● Buenos Aires, Argentina ● Android developer en Ring (Amazon) ● Docente e instructor ● Experiencia desarrollando con Android desde 2011 ● @facundomr

Slide 3

Slide 3 text

Agenda ● Calidad en el software ● ¿Qué es una prueba? ● ¿En qué consiste una prueba? ● Tipos de pruebas ● Pruebas unitarias ● Mocking ● Características de MockK ● Demo

Slide 4

Slide 4 text

Calidad en el software ● ¿Qué es la calidad? ● ¿Cómo se mide? ● ¿Cómo se puede asegurar que la calidad de un producto de software es la correcta? ○ ¿Extreme programming? ○ ¿Software craftmanship?

Slide 5

Slide 5 text

¿Qué es una prueba? ● La prueba consiste en la búsqueda de errores en el sistema. ● Las pruebas muestran la presencia, no la ausencia de errores (bugs)

Slide 6

Slide 6 text

¿En qué consiste una prueba? 1. Se define una situación inicial. 2. Se realiza una operación sobre el sistema. 3. Se evalúa la situación final, comparándola con la esperada. Este proceso es análogo a la revisión de un contrato. Given - When - Then

Slide 7

Slide 7 text

● Unitarias ● Integración ● Desempeño ● Funcionales ● Aceptación ● Instalación Tipos de pruebas

Slide 8

Slide 8 text

Pruebas unitarias y mocks

Slide 9

Slide 9 text

Pruebas unitarias ● Sirven para probar la unidad más básica de código: una función/método ● Un test por funcionalidad, en funciones (tests) separados, agrupados en una clase. ● Se escribirá al menos un test por función, pudiendo haber más de un test para una misma función.

Slide 10

Slide 10 text

Demo ¡Aprendamos haciendo!

Slide 11

Slide 11 text

Mocking ● Un Mock es un objeto simulado ● Cuando una clase que estamos probando depende de otra, ¿cómo mantenemos el test unitario? ○ Proveyendo mocks como dependencias ● ¿Qué formas hay de hacer esto? ○ Mockito + mockito-kotlin + PowerMockito ○ MockK

Slide 12

Slide 12 text

MockK

Slide 13

Slide 13 text

MockK ● https://mockk.io/ ● Biblioteca para escribir mocks-spys en Kotlin en forma idiomática, concisa y más fácil de leer. ● Completa ○ mock, spy ○ verify ○ extension functions, objects ○ slot, capture ○ corutinas

Slide 14

Slide 14 text

Otros ejemplos interesantes

Slide 15

Slide 15 text

Verify @Test fun test() { verify(inverse = true) { loginRepository.getUser() api.getUser() } }

Slide 16

Slide 16 text

verify verify(atLeast = 1) verify(atMost = 1) verify(exactly = 1) verify(ordering = Ordering.UNORDERED) / verify verify(ordering = Ordering.ALL) / verifyAll verify(ordering = Ordering.SEQUENCE) / verifySequence verify { loginRepository.getUser() wasNot called api.getUser() }

Slide 17

Slide 17 text

Chained calls @Test fun test() { val repository = mockk { every { getProfile().user.features.isEnabled } returns true } ... }

Slide 18

Slide 18 text

Corutinas @Test fun test() = runBlockingTest { val repository = mockk(relaxed = true) coEvery { repository.getUser() } coAnswers { ... } coVerify { repository.getUser() } }

Slide 19

Slide 19 text

¿Preguntas?

Slide 20

Slide 20 text

¡Muchas gracias!