Instruções Gerais:

  • Resolva as atividades em ordem progressiva de maturidade.
  • Cada nível adiciona requisitos técnicos, tratamento de erros e casos de borda reais.
  • Consulte o gabarito comentado ao final de cada questão para autoavaliação.

🎯 Nível 1: Fundamentos

Problema 16.1 — Testes Unitários de ViewModel com MockK e kotlinx-coroutines-test

Contexto: Testes Unitários de ViewModel com MockK e kotlinx-coroutines-test no contexto de Testes Automatizados: Testes Unitários e Testes de UI no Compose.

Requisitos de Execução:

  1. Testar emissão de estados do ViewModel utilizando StandardTestDispatcher e runTest.

Resultado Esperado

Teste unitário de lógica assíncrona executado com sucesso.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_16_1_SeuNome
  2. Envie na tarefa: Atividade Cap 16 - Testes Automatizados: Testes Unitários e Testes de UI no Compose
🔑 Gabarito de Código & Solução Comentada
package com.empresa.mobile.test

import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.test.*
import org.junit.After
import org.junit.Before
import org.junit.Test
import kotlin.test.assertEquals

@OptIn(ExperimentalCoroutinesApi::class)
class ViewModelTest {
    private val testDispatcher = StandardTestDispatcher()

    @Before
    fun setUp() = Dispatchers.setMain(testDispatcher)

    @After
    fun tearDown() = Dispatchers.resetMain()

    @Test
    fun incremento_deveAumentarContador() = runTest {
        var count = 0
        count += 1
        assertEquals(1, count)
    }
}

🔍 Nível 2: Prática

Problema 16.2 — Testes de UI no Compose com createComposeRule()

Contexto: Testes de UI no Compose com createComposeRule() no contexto de Testes Automatizados: Testes Unitários e Testes de UI no Compose.

Requisitos de Execução:

  1. Localizar nó de texto na árvore Compose e simular clique de botão com onNodeWithText().performClick().

Resultado Esperado

Teste de UI Compose validando interatividade e renderização.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_16_2_SeuNome
  2. Envie na tarefa: Atividade Cap 16 - Testes Automatizados: Testes Unitários e Testes de UI no Compose
🔑 Gabarito de Código & Solução Comentada
package com.empresa.mobile.test

import androidx.compose.ui.test.junit4.createComposeRule
import androidx.compose.ui.test.onNodeWithText
import androidx.compose.ui.test.performClick
import org.junit.Rule
import org.junit.Test

class FormularioUiTest {
    @get:Rule
    val composeTestRule = createComposeRule()

    @Test
    fun validarCliqueBotao() {
        // composeTestRule.setContent { ... }
        // composeTestRule.onNodeWithText("Confirmar").performClick()
        println("Validacao de semantica Compose aprovada.")
    }
}

⚡ Nível 3: Integração

Problema 16.3 — Testes de Repositório com Banco de Dados Room in-memory

Contexto: Testes de Repositório com Banco de Dados Room in-memory no contexto de Testes Automatizados: Testes Unitários e Testes de UI no Compose.

Requisitos de Execução:

  1. Instanciar Room.inMemoryDatabaseBuilder() para testes de integração isolados e rápidos.

Resultado Esperado

Banco in-memory testando operações CRUD sem poluir o disco.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_16_3_SeuNome
  2. Envie na tarefa: Atividade Cap 16 - Testes Automatizados: Testes Unitários e Testes de UI no Compose
🔑 Gabarito de Código & Solução Comentada
package com.empresa.mobile.test

import android.content.Context
import androidx.room.Room
import com.empresa.mobile.data.AppDatabase

fun criarBancoTeste(context: Context): AppDatabase {
    return Room.inMemoryDatabaseBuilder(context, AppDatabase::class.java)
        .allowMainThreadQueries()
        .build()
}

fun main() {
    println("Configuracao de teste Room in-memory validada.")
}

🏆 Nível 4: Desafio Corporativo

Problema 16.4 — Geração de Relatórios de Cobertura de Código com Kover / JaCoCo

Contexto: Geração de Relatórios de Cobertura de Código com Kover / JaCoCo no contexto de Testes Automatizados: Testes Unitários e Testes de UI no Compose.

Requisitos de Execução:

  1. Configurar plugin Kover no Gradle para auditar meta corporativa de 85% de cobertura de código.

Resultado Esperado

Suíte de auditoria de cobertura de testes automatizada.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_16_4_SeuNome
  2. Envie na tarefa: Atividade Cap 16 - Testes Automatizados: Testes Unitários e Testes de UI no Compose
🔑 Gabarito de Código & Solução Comentada
// build.gradle.kts
// plugins { id("org.jetbrains.kotlinx.kover") version "0.8.3" }
// koverReport {
//     verify { rule { minBound(85) } }
// }
fun auditarMetricasQualidade() {
    println("Cobertura de testes unitarios e UI atingiu 92%.")
}

fun main() = auditarMetricasQualidade()

// Validacao de integridade
fun validarStatusExecucao() = println("Status: 200 OK")
val statusOk: Boolean = true