Il y a deux façons: L'image et le rendu basé.
La manière de l'image: Vous devez trouver un moyen de rendre l'image dans un tampon de pixels interne (vous pouvez donc exécuter vos tests sans tête, c'est-à-dire sans apparaître d'interface utilisateur).
Ensuite, sélectionnez quelques pixels et assurez-vous que leurs couleurs sont correctes. Dans votre exemple, sélectionnez un couple de pixels blancs autour du texte pour vous assurer que le rendu ne fuit pas. Des méthodes auxiliaires telles que assertThatRectangleIs(area, color)
aideront à couvrir certains terrains. L'idée est de sélectionner des zones spécifiques (comme la barre verticale gauche du H) et de ne pas être trop pointilleux.
La méthode de rendu fonctionne avec l'hypothèse que votre bibliothèque gfx fonctionne. Alors ce que vous faites est vous moquez le code de rendu réel avec quelque chose comme ceci:
public class MockGC extends GC {
List<Op> ops = new ArrayList<Op>();
void drawLine (int x1, int y1, int x2, int y2) {
ops.add(new Line(x1, y1, x2, y2, copyGC (gc)));
}
}
vous sauver juste la commande et toutes les options pertinentes dans une structure de données qui est facile à comparer. Ou encore:
public class MockGC extends GC {
StringBuilder buffer = new StringBuilder();
void drawLine (int x1, int y1, int x2, int y2) {
buffer.append("line "+x1+","+y1+" - "+x2+","+y2+", color="+foreground()+"\n");
}
}
Plus tard, vous pouvez simplement vérifier que les commandes correctes de rendu ont été émises et que le GC (couleurs, police, rendu des notes) a été utilisé.
Cette dernière méthode est beaucoup plus rapide et précise à 100%, mais beaucoup plus de travail à coder.
Visuellement mais de manière systématique? –
Oui, visuellement mais de manière systématique – yxk