0Pricing
Kotlin Academy · Lezione

Mocking con MockK

Crei mock delle dipendenze

Mocking con MockK è una lezione Kotlin Academy gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Kotlin Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Kotlin Academy include 4 lezioni in totale.

Che cos'è MockK?

MockK è una libreria di mocking progettata per Kotlin. Crea versioni simulate delle dipendenze, così da poter testare una classe in isolamento.

  • Supporto Kotlin di prima classe (object, estensioni, coroutine)
  • DSL leggibile per configurare il comportamento e verificare le chiamate

Aggiunta di MockK

Aggiunga MockK come dipendenza di test.

dependencies {
    testImplementation("io.mockk:mockk:1.13.11")
}

Creazione di un mock

Usi mockk<Type>() per creare un mock. Per impostazione predefinita, i suoi metodi non sono configurati e generano un errore se vengono chiamati.

import io.mockk.mockk

interface Repo { fun find(id: Int): String }

val repo = mockk<Repo>()

Configurazione con every

Definisca il comportamento usando every { } returns .... In questo modo indica al mock che cosa restituire per una determinata chiamata.

import io.mockk.every
import io.mockk.mockk

interface Repo { fun find(id: Int): String }

val repo = mockk<Repo>()
// every { repo.find(1) } returns "Ada"

Verifica delle chiamate

Usi verify { } per verificare che un metodo sia stato chiamato. Può richiedere un numero esatto di chiamate.

import io.mockk.verify

// verify { repo.find(1) }
// verify(exactly = 2) { repo.find(any()) }
// verify(exactly = 0) { repo.find(99) }

Matcher degli argomenti

I matcher come any(), eq() e match { } rendono flessibili la configurazione e la verifica.

import io.mockk.every
import io.mockk.mockk

interface Repo { fun find(id: Int): String }
val repo = mockk<Repo>()
// every { repo.find(any()) } returns "X"
// every { repo.find(match { it > 10 }) } returns "big"

Mock rilassati

Un mock relaxed restituisce valori predefiniti sensati (0, una stringa vuota e così via) per le chiamate non configurate, evitando di dover configurare tutto.

import io.mockk.mockk

interface Logger { fun log(msg: String) }

val logger = mockk<Logger>(relaxed = true)

Acquisizione degli argomenti

Usi uno slot con capture() per esaminare l'argomento esatto passato a un metodo simulato.

import io.mockk.slot
import io.mockk.verify

val msgSlot = slot<String>()
// verify { logger.log(capture(msgSlot)) }
// println(msgSlot.captured)

Spy

Uno spyk avvolge un oggetto reale: i metodi reali vengono eseguiti se non li configura diversamente. È utile per il mocking parziale.

import io.mockk.spyk

class Calc { fun square(n: Int) = n * n }

val calc = spyk(Calc())
// real square runs; you can still verify { calc.square(3) }

Generare un'eccezione da un mock

Configuri un metodo in modo che generi un'eccezione, così da poter testare i percorsi di gestione degli errori.

import io.mockk.every
import io.mockk.mockk

interface Repo { fun find(id: Int): String }
val repo = mockk<Repo>()
// every { repo.find(0) } throws NoSuchElementException()

Pulizia

Chiami clearAllMocks() in @AfterEach, oppure usi la MockKExtension di JUnit5, per reimpostare lo stato dei mock tra un test e l'altro ed evitare contaminazioni.

import io.mockk.clearAllMocks
import org.junit.jupiter.api.AfterEach

class ServiceTest {
    @AfterEach
    fun tearDown() { clearAllMocks() }
}

Verifica rapida

Ha un mock con molti metodi, ma gliene interessa soltanto uno. Desidera che i metodi non configurati restituiscano valori predefiniti innocui. Che cosa crea?

Riepilogo

MockK consente di isolare il codice sottoposto al test:

  • mockk() crea i mock, mentre every { } returns ne configura il comportamento
  • verify { } controlla le interazioni
  • Matcher, acquisizione con slot, spyk, mock rilassati
  • clearAllMocks() tra un test e l'altro

Prossimo argomento: le coroutine.

Domande Frequenti

La lezione «Mocking con MockK» è gratuita?

Sì — il testo completo di «Mocking con MockK» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Kotlin Academy, passa a CoddyKit PRO. Il corso Kotlin Academy include 4 lezioni in totale.

Cosa imparerò in «Mocking con MockK»?

Crei mock delle dipendenze Eserciti Kotlin Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Kotlin Academy?

Non è richiesta alcuna esperienza precedente. Kotlin Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.

Quanto tempo richiede la lezione «Mocking con MockK»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Kotlin Academy?

Sì. Ogni lezione Kotlin Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Scrittura di test con JUnit5
  2. Asserzioni
  3. Mocking con MockK
  4. Test delle coroutine
← Torna a Kotlin Academy