Domanda

Come si fa a prova se un'applicazione reso qualcosa correttamente?

Per esempio (ad esempio 2D):

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

Come si fa a sapere che l'ombra è posizionato correttamente o il corretto colore / contorno è stato reso? O se l'effetto 3D rende correttamente quando si potrebbe ruotare in senso? Altre cose potrebbero essere, se la parola arte è stato ri-dimensioni, come si fa a misurare il suo 'correttezza'?

È stato utile?

Soluzione

Ci sono alcuni modi:

  1. Se in realtà è specificato in modo molto preciso che cosa dovrebbe essere reso ed esattamente in che modo, allora si può semplicemente confrontare i pixel per una resa di riferimento.
  2. In caso di cose come SVG non è così chiaramente specificato. L'approccio comune è quello di utilizzare i rendering di riferimento e confrontarli a mano. Si può facilmente sovrapporre entrambi, sottrarre l'uno dall'altro e spot differenze evidenti in quel modo. Non è un processo automatico, però.
  3. Potete guardare i dati che rappresentano l'immagine disegnata al posto dell'immagine sullo schermo direttamente. Ciò che viene disegnato è (nel tuo esempio) una grafica vettoriale. Ciò significa che ci sono diverse forme che deve avere caratteristiche ben definite, forme e colori e si può semplicemente confrontare i dati di forma a un riferimento. Quel genere di cose può essere eseguita automaticamente. Penso che Google utilizza un approccio simile per confrontare il rendering di Chrome con i rendering di riferimento di pagine web; non si confronta i dati dei pixel, si confrontano i dati di livello superiore che cosa e come il browser dovrebbe di rendering.

Altri suggerimenti

Ci sono due modi:. L'immagine e quella di rendering basato

Il modo immagine: È necessario trovare un modo per rendere l'immagine di un buffer di pixel interno (in modo da poter eseguire i test "senza testa", vale a dire senza una reale interfaccia utente popping up)

.

Quindi selezionare alcuni pixel e assicurarsi che i loro colori sono corretti. Nel tuo esempio, selezionare un paio di pixel bianchi attorno al testo per assicurarsi che il rendering non ci siano perdite. metodi di supporto come assertThatRectangleIs(area, color) potranno contribuire a coprire po 'di terreno. L'idea è quella di selezionare aree specifiche (come la barra verticale a sinistra della H) e non essere troppo esigente.

Il modo di rendering basato lavora con il presupposto che le tue opere della biblioteca GFX. Quindi, ciò che si fa è che si deridere il codice di rendering vero e proprio con qualcosa di simile:

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

quindi basta salvare il comando e tutte le opzioni relative a una struttura di dati che è facile da confrontare. O anche:

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

In seguito, si può poi basta verificare che i comandi di rendering corretti sono stati emessi e che il GC (colori, font, rendendo suggerimenti) è stato utilizzato.

Il secondo modo è molto più veloce e 100% preciso ma molto più lavoro al codice.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top