Sobes.tech
Middle

Que métodos de teste você usa para testar o código em Kotlin?

sobes.tech IA

Resposta da IA

Aplico os seguintes métodos de teste:

  • Teste unitário: Verificação de componentes pequenos individuais (funções, classes) em isolamento. Uso JUnit 5 ou Spek.
  • Teste de integração: Verificação da interação entre vários componentes ou subsistemas.
  • Teste de interface de utilizador: Teste da interface de utilizador num dispositivo real ou emulador. Para Android, uso Espresso ou UI Automator.
  • Teste instrumental: Teste que requer execução num dispositivo ou emulador. Inclui testes de UI e alguns tipos de testes de integração.
  • Teste de ponta a ponta: Teste de toda a aplicação do início ao fim, simulando ações do utilizador.

Para escrever os testes, uso Mockito ou MockK para simular dependências e Hamcrest ou AssertJ para escrever expressões de afirmação.

// Exemplo de teste unitário usando JUnit 5 e MockK
import io.mockk.every
import io.mockk.mockk
import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.Test

class MyServiceTest {

    @Test
    fun `calculateSum should return correct sum`() {
        // Mock da dependência
        val dependency: Dependency = mockk()
        every { dependency.getValue() } returns 10

        val service = MyService(dependency)
        val result = service.calculateSum(20)

        // Verifica o resultado
        assertEquals(30, result)
    }
}

class MyService(private val dependency: Dependency) {
    fun calculateSum(a: Int): Int {
        return a + dependency.getValue()
    }
}

interface Dependency {
    fun getValue(): Int
}
// Exemplo de teste de UI para Android com Espresso
import androidx.test.espresso.Espresso.onView
import androidx.test.espresso.action.ViewActions.click
import androidx.test.espresso.assertion.ViewAssertions.matches
import androidx.test.espresso.matcher.ViewMatchers.withId
import androidx.test.espresso.matcher.ViewMatchers.withText
import androidx.test.ext.junit.rules.ActivityScenarioRule
import org.junit.Rule
import org.junit.Test

class MainActivityTest {

    @get:Rule
    var activityRule: ActivityScenarioRule<MainActivity> = ActivityScenarioRule(MainActivity::class.java)

    @Test
    fun clickingButtonChangesText() {
        // Encontrar o botão pelo id e clicar nele
        onView(withId(R.id.button)).perform(click())

        // Verificar se o texto no TextView mudou
        onView(withId(R.id.textView)).check(matches(withText("Texto alterado!")))
    }
}