Ich verwende Graphics2D von Java, um eine grafische Darstellung eines Graphen zu erzeugen. Ich verwende auch ImageIO, um eine PNG-Datei zu schreiben. ( ImageIO.write(image, "png", out);
)
Ich frage mich, wie ich JUnit-Tests schreiben soll, um zu testen, ob die generierten Grafiken das sind, was erwartet wird. Ich könnte die PNG-Dateien vorgenerieren, aber was, wenn die Schriftart auf einer anderen Maschine ein wenig anders ist?
Sie könnten versuchen, nach bestimmten bekannten Funktionen des Ausgangs zu suchen, z. B .:
Und / oder Sie könnten Tests für einige "Aggregateigenschaften" schreiben, die eine gewisse Unschärfe in den Ergebnissen ermöglichen:
Sie könnten alle RGB-Werte der generierten Bilder in ein Array einlesen und dieses 2D-Array mit einem, das ein vorgeneriertes Bild darstellt, vergleichen, wenn Sie das gesamte Bild wirklich genau kennen.
Wenn Sie die Schriftarten ignorieren möchten, können Sie dasselbe für Regionen des Bildes tun, die keine variablen Daten enthalten, abhängig von der Umgebung, in der die Bilder generiert werden. Die Erstellung von Korrektur- und Normalisierungsroutinen für Komponententests wäre Zeitverschwendung, es sei denn, die Anwendung würde Bilder mit einer so hohen Genauigkeit erzeugen, wie dies gerechtfertigt ist.
Ich habe festgestellt, dass es effektiv ist, um gerenderte Schriften für plattformübergreifende Tests von einfachen Dingen wie Text auf einem statischen Bild plattformübergreifend identisch zu machen.
Font
und FontRenderContext
in die Klasse ein, die die Schriften rendert, damit sie im Test kontrolliert werden können. Font.createFont()
, um eine Schriftart aus der Datei zu generieren. FontRenderContext
. Wenn Sie diesen Schritt überspringen, variieren die Ergebnisse scheinbar plattformübergreifend. Ich bin neugierig, ob andere denken, dass dies aus irgendeinem Grund spröde oder fehleranfällig ist, aber ich habe bisher gute Ergebnisse damit erzielt.
Tags und Links java junit graphics2d