2013-02-19 1 views
5

Esiste una best practice standard per il codice di test dell'unità che genera grafica? Sto lavorando specificatamente con Java e jUnit, ma penso che il concetto si applicherebbe anche in altre lingue.Grafica test unità

Finora, il meglio che posso venire con sta usando Mockito per deridere l'oggetto Graphics e affermare cose precalcolati, come (pseudocodice):

assert that graphics.drawString was called with ("abc", 50, 100) 
assert that graphics.setBackgroundColor was called with Color.RED 

Mentre questo è cosa buona e giusta, Mi stavo chiedendo se questo è il modo giusto per farlo o se ci sono pratiche più consolidate per testare il codice grafico.

+1

hai preso in considerazione l'acquisizione dell'immagine dalla grafica e la confronti con un file immagine letto da risorse? –

+0

@guido - Questo è un buon suggerimento che non ho esplorato. Sicuramente vale la pena dare un'occhiata. –

risposta

3

Non so se questo è una pratica consolidata, ma prenderei in considerazione un SVGGraphics2D dal progetto Batik per la simulazione di grafica e il confronto dei file SVG generati.

Il vantaggio rispetto confronto dei file binari è che i file SVG sono file XML relativamente leggibili, quindi se i due file non sono uguali, non si sa solo che c'è un problema, ma anche di ottenere un buon suggerimento circa il luogo esatto del problema.

Il vantaggio rispetto alla soluzione è che questi file SVG possono essere visualizzati (ad esempio in un browser), quindi lo scenario testato è auto-documentato.

+0

Dovrò dare un'occhiata a questo corso. Mi piace il suono del confronto tra file xml e contesti grafici grezzi. –

1

È possibile utilizzare qualcosa come Mockito e prendere in giro l'oggetto grafico. Quindi puoi verificare che siano stati chiamati i metodi drawString e setBackgroundColor. Prendendo alcuni esempi da here

Qualcosa di simile:

import static org.mockito.Mockito.*; 


Graphics graphics= mock(Graphics.class); 
//Run you code .... 

//verification that the methods were called 

verify(mockedList).drawString ("abc", 50, 100); 
1

come lei ha ricordato, è possibile testare i vostri calcoli e chiamare API grafiche. questo è facile. ma verificare se si sta usando correttamente la api grafica (e produrre l'immagine corretta), può essere veramente difficile. so che alcune aziende creano screenshot della grafica generata (ad esempio la pagina Web) e la confrontano con i risultati previsti utilizzando molte metriche complesse. ma di solito non è un modo per ridurre i costi ma l'obiettivo annuale di qualche manager (diciamo 'automazione dei processi'). quindi pensaci due volte prima di andare in questo modo - di solito non vale la pena il dolore