¿Cómo puedo escribir una prueba para dibujar un cuadrado en mi aplicación openGL?

Digamos que este es mi código:

public void render(){
    GL11.glClearColor(0, 0, 1, 1);
    GL11.glClear(GL11.GL_COLOR_BUFFER_BIT | GL11.GL_DEPTH_BUFFER_BIT);
    GL11.glColor3f(.5f, .5f, 1.0f);
    GL11.glBegin(GL11.GL_QUADS);
        GL11.glVertex3f(0,0,0);
        GL11.glVertex3f(50,0,0);
        GL11.glVertex3f(50,50,0);
        GL11.glVertex3f(0,50,0);
    GL11.glEnd();
}

¿Cómo puedo escribir una prueba unitaria para asegurarme de que el cuadrado se dibujó donde debería estar y con el color correcto? ¿Debería también probar cosas como, la pantalla se borra en cada cuadro? Estaba pensando que abstraería el código de OpenGL lejos de mi código cuadrado. En otras palabras, crearía una clase que crea "vectores" y luego su función de representación se dibujaría en la pantalla y no probaría eso. Sin embargo, DEBE probar todas las funciones públicas. Entonces, supongo que vuelve a: bueno, ¿cómo puedo saber lo que se dibujó en la pantalla en openGL?

Además, ahora que lo pienso, realmente no debería estar ejecutando mi aplicación cada vez que ejecuto la prueba, lo que presenta potencialmente otro nivel de complejidad ...

Respuesta 1

Absolutamente, deberá envolver la biblioteca GL11 en otro adaptador, luego burlarse de ese adaptador. Luego puedes demostrar que tu clase pasa las coordenadas correctas y el color correcto. (O podría usar PowerMock, pero, sinceramente, me gustan más Mockito y las interfaces burlonas).

Si usa una abstracción vectorial, también podría hacer lo mismo para probarla. El envoltorio para GL11 debe ser lo suficientemente pequeño y simple como para que pueda verificar que es correcto simplemente por inspección, ya que no podrá realizar una prueba unitaria sin dibujar realmente en una pantalla. Solo crearía esa abstracción adicional si la usas en otro lugar.

En cuanto a mostrar que la clase es "correcta", y dibuja el cuadrado en el lugar "correcto", Matt tiene razón en que probar el comportamiento de renderizado es difícil, y probar la estética IMO solo debe hacerse manualmente. Con eso en mente, si no crea la abstracción vectorial, simplemente puede verificar que la distancia entre las coordenadas sea la misma, de modo que sea un "cuadrado", y luego llamarlo un día, ya que esto le ayuda a mantener la prueba flexible y cambie fácilmente el tamaño y el color del cuadrado si es necesario.

Estas son solo opciones. Las pruebas automatizadas no sustituyen las pruebas manuales al menos una vez. Si el comportamiento que está viendo es algo que siempre verificaría manualmente cada vez que lo cambia de todos modos, y se abstrae de cualquier cosa que pueda afectar el comportamiento (para que nada pueda crear errores de regresión), no se preocupe demasiado por creando una prueba unitaria para él y solo verifíquelo manualmente.

Respuesta: 2

Estoy usando el complemento gwt-maven-y desde hace poco recibí errores extraños en mi IDE (eclipse de oxígeno). Después de investigarlo, me doy cuenta de que el complemento gwt-maven se comporta de manera diferente cuando se ejecuta en eclipse ...

Aquí tengo una clase simple que extiende una clase en la biblioteca de gráficos ACM llamada GRect. Grect es un rectángulo básico que se puede dibujar en un GCanvas (también parte de ACM). Lo que quiero lograr es un nuevo ...

Como se sabe, las clases de la biblioteca rt.jar se cargan a través de Bootstrap Classloader. java.lang es parte de la biblioteca rt.jar. Sin embargo, este ejemplo System.out.println (ArrayList.class.getClassLoader ()); ...

Estoy tratando de permitir al usuario la libertad de ingresar un número a su propio estilo como si pudiera elegir ingresar 2 o 2.00, pero como sabe, el doble no puede aceptar esto (2). Quiero que el doble acepte esto con ...