Frage

Wie testet man, ob eine Anwendung etwas richtig gerendert hat?

Zum Beispiel (2D-Beispiel):

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

Woher weiß man, dass der Schatten richtig platziert ist oder die richtige Farbe/Kontur gerendert wurde?Oder ob der 3D-Effekt korrekt gerendert wird, wenn man sich in eine Richtung dreht?Andere Dinge könnten sein: Wenn die Größe des Wortes „Kunst“ geändert würde, wie misst man seine „Korrektheit“?

War es hilfreich?

Lösung

Es gibt ein paar Möglichkeiten:

  1. Wenn es tatsächlich sehr genau festgelegt, was gemacht werden soll, und genau in welcher Art und Weise, dann können Sie nur die Pixel zu einem Referenz Rendering vergleichen.
  2. Bei Sachen wie SVG ist es nicht so klar festgelegt. Die übliche Vorgehensweise ist hier Bezug Renderings verwenden und vergleichen sie mit der Hand. Sie können beide leicht überlagern, subtrahieren eine von der anderen und eklatante Unterschiede erkennen, die Art und Weise. Es ist kein automatischer Prozess, though.
  3. Sie können an den Daten sehen das gezeichnete Bild anstelle des Bildes auf dem Bildschirm darstellen, direkt. Was wird gezogen ist (im Beispiel) eine Vektorgrafik. Das Mittels gibt es mehrere Formen, die gut definierte Eigenschaften, Formen und Farben haben sollten und Sie können einfach Ihre Formdaten zu einer Referenz vergleichen. Diese Art der Dinge kann automatisch erfolgen. Ich denke, dass Google einen ähnlichen Ansatz verwendet Chrome-Rendering anhand Renderings von Web-Seiten zu vergleichen; sie nicht Pixeldaten vergleichen, sie die übergeordneten Daten zu vergleichen, was und wie der Browser würde machen.

Andere Tipps

Es gibt zwei Möglichkeiten:Das Bild und das Rendering basieren.

Der Bildweg:Sie müssen einen Weg finden, das Bild in einen internen Pixelpuffer zu rendern (damit Sie Ihre Tests „kopflos“ ausführen können, d. h.ohne dass eine tatsächliche Benutzeroberfläche auftaucht).

Wählen Sie dann einige Pixel aus und stellen Sie sicher, dass die Farben korrekt sind.Wählen Sie in Ihrem Beispiel ein paar weiße Pixel um den Text herum aus, um sicherzustellen, dass die Darstellung nicht ausläuft.Hilfsmethoden wie assertThatRectangleIs(area, color) wird helfen, einiges abzudecken.Die Idee besteht darin, bestimmte Bereiche auszuwählen (wie den linken vertikalen Balken des H) und nicht zu wählerisch zu sein.

Die auf Rendering basierende Methode geht davon aus, dass Ihre Grafikbibliothek funktioniert.Was Sie also tun, ist, den eigentlichen Rendering-Code mit etwas wie diesem zu simulieren:

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)));
    }
}

Sie speichern also einfach den Befehl und alle relevanten Optionen in einer Datenstruktur, die leicht zu vergleichen ist.Oder auch:

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");
    }
}

Später können Sie dann einfach überprüfen, ob die richtigen Rendering-Befehle ausgegeben wurden und ob der GC (Farben, Schriftart, Rendering-Hinweise) verwendet wurde.

Letzterer Weg ist viel schneller und 100 % präzise, ​​erfordert aber auch viel mehr Arbeit beim Programmieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top