Question

Comment un test si une application a rendu quelque chose correctement?

Par exemple (exemple 2D):

Microsoft Word 2007 http://img32.imageshack.us/img32/6197/ 37841144.png

Comment peut-on savoir que l'ombre est correctement placé ou la bonne couleur / contour a été rendu? Ou si l'effet 3D rend correctement lorsque l'on tournerait dans une direction? D'autres choses pourraient être si l'art de mot a été redimensionnée, comment peut-on mesurer la « justesse »?

Était-ce utile?

La solution

Il y a quelques façons:

  1. Si elle est en fait très précisément spécifié ce qui doit être rendu et exactement de quelle manière, vous pouvez simplement comparer les pixels à un rendu de référence.
  2. En cas de choses comme SVG ce n'est pas clairement spécifié. L'approche habituelle est d'utiliser des rendus de référence et de les comparer à la main. Vous pouvez facilement superposer les deux, soustraire l'un de l'autre et repérer les différences flagrantes de cette façon. Ce n'est pas un processus automatique, cependant.
  3. Vous pouvez regarder les données représentant l'image tirée au lieu de l'image sur l'écran directement. Ce qui est dessiné est (dans votre exemple) un graphique vectoriel. Cela signifie qu'il ya plusieurs formes qui devraient avoir des propriétés bien définies, des formes et des couleurs et vous pouvez simplement comparer vos données de forme à une référence. Ce genre de choses peut se faire automatiquement. Je pense que Google utilise une approche similaire pour comparer le rendu de Chrome avec Rendus référence de pages web; ils ne comparent pas des données de pixels, ils comparent les données de niveau supérieur quoi et comment le navigateur serait rendre.

Autres conseils

Il y a deux façons:. L'image et le rendu sur la base d'un

Le chemin d'image: Vous devez trouver un moyen de rendre l'image à un tampon de pixel interne (de sorte que vous pouvez exécuter vos tests « sans tête », à savoir sans une interface utilisateur réelle popping up)

.

Sélectionnez ensuite 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. méthodes aide comme assertThatRectangleIs(area, color) contribueront à couvrir un terrain. L'idée est de sélectionner des zones spécifiques (comme la barre verticale gauche de la H) et ne pas être trop pointilleux.

Le rendu moyen basé fonctionne avec l'hypothèse que vos travaux de bibliothèque de GFX. Alors qu'est-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 enregistrez simplement 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 100% précis, mais beaucoup plus de travail à code.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top