Non TDD: Test Pragmatici con Java

Stiamo costruendo un clone di Google Photos e il test è davvero difficile!

Come facciamo a verificare che il nostro app Java generi i processi ImageMagick corretti o che le miniature risultanti siano delle dimensioni corrette e siano effettivamente miniature, non semplici immagini casuali di gatti? Come testiamo diverse versioni di ImageMagick e sistemi operativi?

Cosa c’è nel Video

00:00 Intro

Iniziamo il video con una panoramica generale di ciò che rende così complicato testare il nostro clone di Google Photos. Come nell’episodio precedente, abbiamo iniziato a estrarre miniature da immagini, ma ora abbiamo bisogno di un modo per testarlo. Poiché questo viene fatto tramite un processo esterno ImageMagick, siamo in un percorso impegnativo.

01:05 Configurazione di JUnit e scrittura dei primi metodi di test

Prima di tutto, configureremo JUnit 5. Poiché non stiamo utilizzando un framework come Spring Boot , serve come un ottimo esercizio per aggiungere il set minimo di librerie e configurazione che ci permette di iniziare con JUnit. Inoltre, scriveremo alcuni scheletri di metodi di test, pensando a come approcciare il test del nostro codice esistente e prendendo cura della denominazione dei metodi di test, ecc.

04:19 Implementazione della rilevazione della versione ImageMagick

Nell’ultimo episodio, abbiamo notato che eseguire il nostro app Java su sistemi diversi porta a risultati imprevisti o semplicemente errori. Ciò accade perché diverse versioni di ImageMagick offrono un set di API diverso che dobbiamo chiamare. Pertanto, dobbiamo adattare il nostro codice per rilevare la versione di ImageMagick installata e anche aggiungere un metodo di test che verifica che ImageMagick sia effettivamente installato, prima di eseguire qualsiasi test.

10:32 Scelte nelle Prove di Test 

Come è evidente con il rilevamento delle versioni di ImageMagick, il vero problema è che per raggiungere una copertura di test al 100% con una varietà di sistemi operativi e versioni di ImageMagick installate, sarebbe necessario un setup di CI/CD piuttosto elaborato, che non rientra nell’ambito di questo progetto. Quindi stiamo discutendo i pro e i contro del nostro approccio.

12:00 Implementazione di @EnabledIfImageMagickIsInstalled 

Ciò che possiamo fare, tuttavia, è assicurarci che il resto del nostro suite di test venga eseguito solo se ImageMagick è installato. Quindi, scriveremo un’annotazione personalizzata per JUnit 5 chiamata EnabledIfImageMagickIsInstalled che puoi aggiungere a qualsiasi metodi di test o addirittura a intere classi per abilitare tale comportamento. Se ImageMagick non è installato, i test semplicemente non verranno eseguiti invece di mostrare un messaggio di errore sgradevole.

16:05 Prova di Creazione di Miniature Riuscita

Il problema più grande da affrontare è: come possiamo verificare correttamente che i miniatura siano stati creati correttamente? Approfondiremo questa domanda testando il codice di uscita di ImageMagick, stimando le dimensioni dei file e caricando anche l’immagine, assicurandoci che abbia la giusta quantità di pixel. Tutto questo con l’aiuto di AssertJ e le sue SoftAssertions per combinare facilmente più assert in uno.

23:59 Funziona ancora solo sul mio computer

Anche dopo aver testato l’intero flusso di lavoro, abbiamo ancora bisogno di assicurarci di chiamare un’API ImageMagick diversa per versioni diverse. Possiamo aggiungere rapidamente quel comportamento per supportare sia IM6 che IM7, e abbiamo finito.

25:53 Deployment

È ora di distribuire l’applicazione sul mio NAS. E questa volta, tutto funziona come previsto!

26:20 Ulteriori considerazioni sul testing

In questa puntata abbiamo fatto una buona quantità di testing. Raccogliamo tutte le sfide e le strategie di testing pragmatiche che abbiamo imparato.

27:31 Prossimi passi

Chiuderemo la puntata esaminando cosa ci aspetta: problemi di multithreading!

Ci vediamo nella prossima puntata.

Source:
https://dzone.com/articles/i-dont-tdd-pragmatic-testing-with-java