L'automazione dei test della logica di business di applicazioni complesse ha una lunga storia, a partire dai primi script per la verifica dei validatori fino ai moderni test sui microservizi. Con l'aggravarsi delle architetture (monolitico, SOA, micro- e macroservizi) è emerso un problema: le modifiche a un livello dell'architettura spesso rompono i test a livelli diversi.
Problema consiste nella necessità di scrivere test robusti alle riorganizzazioni delle interazioni tra i vari livelli dell'applicazione: modifiche a contratti, strutture dati, processi aziendali. Spesso i test si legano ai dettagli dell'implementazione, rendendoli "fragili" e difficili da mantenere.
Soluzione — costruire test secondo il principio del "black box" con orientamento ai dati di input/output, utilizzare strati di astrazione per accedere alle entità del sistema (ad esempio, Service Layer e Domain Layer nell'architettura). È necessario separare la logica di business dai dettagli infrastrutturali e utilizzare mock/stub per le dipendenze esterne, al fine di garantire isolamento e stabilità ai test.
Caratteristiche chiave:
Qual è la differenza tra verificare la logica di business tramite il livello UI rispetto a quella attraverso l'API/Domain Layer?
I test UI sono spesso meno robusti ai cambiamenti, poiché anche la minima modifica dell'interfaccia porta al fallimento dei test. I test attraverso l'API o il Domain Layer dipendono meno dal front-end e isolano meglio la verifica delle regole di business.
È necessario fare mock di tutte le dipendenze della logica di business per testarle?
No! Non è necessario fare mock di ciò che può essere realizzato nell'ambiente di test (ad esempio, una memoria leggera invece di un DB). I mock sono necessari per dipendenze complesse, costose o esterne. Un completo mock può portare a test "fittizi" che non riflettono scenari reali.
È sufficiente testare solo scenari positivi per la logica di business?
No! È importante coprire tutti i corner case e gli scenari negativi, altrimenti errori critici rimarranno inosservati, il che porta a vulnerabilità nel principale processo aziendale.
Nel progetto si testava la logica di business solo tramite test UI Selenium, lavorando direttamente con bottoni e moduli. Ogni refactoring del front-end portava a un massiccio fallimento dei test automatici.
Vantaggi:
Svantaggi:
Nel progetto è stato realizzato uno strato di test API e unitari. L'UI copriva solo i percorsi critici, tutta la restante validazione avveniva attraverso il livello di servizio con mock di servizi costosi.
Vantaggi:
Svantaggi: