Serie · 3 articoli

Unit test che verificano davvero

Logica pura senza montare componenti, e il codice che rende i mock inutili

Una suite può avere ottantotto test e un mutation score del 19%: il problema quasi mai è nel mocking, è nel codice che ti costringe a mockare. La serie parte da cosa si può testare senza montare niente, mostra dove i mock diventano una toppa, e arriva al refactoring che li rende superflui.

3
Articoli pubblicati
32
Minuti di lettura
Intermedio
Livello
TestingNuxt 3FlaskPythonVitestMutation Testing

Ottantotto test, e un mutation score del 19%

La reazione istintiva davanti a una suite che non trova niente è dare la colpa ai mock: mockiamo troppo, mockiamo male, i test verificano i mock invece del codice. Quasi sempre è la diagnosi sbagliata.

Il problema di solito non è nel mocking: è nel codice che vi costringe a mockare. Una connessione a Kafka aperta a livello di modulo, un client MongoDB creato all'import, un singleton che si inizializza da solo: ognuna di quelle righe rende impossibile istanziare la logica senza tirarsi dietro mezzo sistema, e i mock diventano la toppa.

La serie parte dall'altro capo: quanto si può verificare senza montare niente. Settantadue test su store, composable e helper, e nessun componente montato. Poi mostra dove i mock stanno nascondendo un problema di progettazione. E finisce con il refactoring che li rende superflui: application factory, dipendenze iniettate, e nessun sys.modules da manomettere.

Cosa imparerai

  • Testare la logica pura senza montare un solo componente
  • Riconoscere quando un mock sta nascondendo un problema di progettazione
  • Rendere testabile un servizio con application factory e dependency injection

Articoli della serie

  1. 01
    Unit test in Nuxt 3: 72 test senza montare un singolo componente 9 min

    72 unit test in Nuxt 3 testando solo logica pura: store Pinia, composable, helper API. Zero dipendenze aggiunte, zero componenti montati.

  2. 02
    Il tuo servizio Flask è impossibile da testare (e non è colpa dei mock) 14 min

    88 test, tre servizi Flask, mutation score al 19%. Il problema non è nel mocking - è nel codice che crea connessioni Kafka e MongoDB al momento dell'import.

  3. 03
    Microservizi Flask testabili: application factory, DI e zero sys.modules hack 9 min

    Tre servizi Flask con connessioni Kafka e MongoDB al top-level, refactoring a application factory con dependency injection. Da 228 righe di conftest a 148.