Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Kotlin Nights - Testing

Kotlin Nights - Testing

11-27-2020. Talk for the #KotlinNights event from the Kotlin La Paz community. Video available at https://www.youtube.com/watch?v=R2c4vvhL7kY

Facundo Rodríguez Arceri

November 27, 2020
Tweet

More Decks by Facundo Rodríguez Arceri

Other Decks in Programming

Transcript

  1. Sobre mí • Facundo Rodríguez Arceri • Buenos Aires, Argentina

    • Android developer en Ring (Amazon) • Docente e instructor • Experiencia desarrollando con Android desde 2011 • @facundomr
  2. 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
  3. 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?
  4. ¿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)
  5. ¿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
  6. 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.
  7. 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
  8. 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
  9. 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() }
  10. Chained calls @Test fun test() { val repository = mockk<LoginRepository>

    { every { getProfile().user.features.isEnabled } returns true } ... }
  11. Corutinas @Test fun test() = runBlockingTest { val repository =

    mockk<LoginRepository>(relaxed = true) coEvery { repository.getUser() } coAnswers { ... } coVerify { repository.getUser() } }