2013-02-19 12 views
5

Gibt es einen Standard Best Practice für Unit-Test-Code, der Grafiken generiert? Ich arbeite speziell mit Java und jUnit, aber ich denke, das Konzept würde auch in anderen Sprachen gelten.Unit Test Graphics

Bisher das Beste, was ich kann kommen Mockito wird mit dem Graphics Objekt zu verspotten und vorausberechneten Dinge wie (Pseudo-Code) behauptet:

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

Während dies alles schön und gut ist, Ich habe mich gefragt, ob dies der richtige Weg ist oder ob es etablierte Praktiken zum Testen von Grafikcode gibt.

+1

Haben Sie erwogen, das Bild aus den Grafiken zu holen und es mit einer Bilddatei zu vergleichen, die aus Ressourcen gelesen wurde? –

+0

@guido - Das ist ein guter Vorschlag, den ich nicht erforscht habe. Auf jeden Fall einen Blick wert. –

Antwort

3

Ich weiß nicht, ob dies gängige Praxis ist, aber ich würde eine SVGGraphics2D aus dem Batik-Projekt für Spott Grafiken und Vergleich der generierten SVG Dateien betrachten.

Der Vorteil gegenüber dem Vergleich von Binärdateien ist, dass SVG-Dateien relativ lesbare XML-Dateien sind. Wenn also die beiden Dateien nicht gleich sind, wissen Sie nicht nur, dass es ein Problem gibt, sondern auch einen guten Hinweis von dem Problem.

Der Vorteil gegenüber Ihrer Lösung besteht darin, dass diese SVG-Dateien angezeigt werden können (z. B. in einem Browser), sodass das getestete Szenario selbst dokumentiert ist.

+0

Ich werde einen Blick in diese Klasse werfen müssen. Ich mag den Klang des Vergleichs von XML-Dateien im Gegensatz zu reinen Grafikkontexten. –

1

Sie könnten etwas wie Mockito verwenden und Ihr Grafikobjekt vortäuschen. Dann können Sie überprüfen, dass die Methoden drawString und setBackgroundColor aufgerufen wurden. Unter einige Beispiele aus here

Etwas wie:

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

wie Sie bereits erwähnt, können Sie Ihre Berechnungen und ruft Grafiken api testen können. das ist einfach. aber überprüfen, ob Sie die Grafik api richtig verwenden (und das korrekte Bild erzeugen), kann wirklich schwierig sein. Ich weiß, dass einige Unternehmen Screenshots der generierten Grafiken (z. B. eine Webseite) erstellen und diese mit dem erwarteten Ergebnis unter Verwendung vieler komplexer Metriken vergleichen. aber normalerweise ist es keine Möglichkeit, die Kosten zu senken, sondern das jährliche Ziel eines Managers (sagen wir "Prozessautomatisierung"). Denken Sie also zweimal nach, bevor Sie diesen Weg gehen - normalerweise ist es den Schmerz nicht wert