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, mentreevery { } returnsne configura il comportamentoverify { }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
- Scrittura di test con JUnit5
- Asserzioni
- Mocking con MockK
- Test delle coroutine