J'écris un jeu et le moteur graphique qui l'accompagne au-dessus d'OpenGL en C ++. Je suis également fan de bons processus de codage et de tests automatisés. Le code graphique + les tests semblent assez immiscibles, car la sortie est souvent visuelle uniquement ou très fortement orientée visuellement.
Par exemple, imaginez-vous analyser le flux d'image brut qui est rendu à l'écran octet par octet - vous avez besoin de données de test avec lesquelles comparer, ce qui est difficile à créer / obtenir, et souvent les images rendues ne sont pas identiques sur un niveau d'octet lors de l'exécution à des moments différents - de petits changements dans les algorithmes vont complètement détruire cette approche.
Je pense à créer une suite de tests unitaires visuels, dans laquelle je peux essentiellement rendre différentes scènes de test, montrant des choses comme la cartographie des ombres, l'animation, etc., etc. etc. Dans le cadre de CI, ces scènes seraient ensuite rendues en vidéo fichier (ou éventuellement le laisser comme un exécutable) avec différentes métriques. Cela nécessiterait toujours une inspection manuelle du fichier vidéo, mais au moins il serait quelque peu automatisé et normalisé.
Qu'est-ce que tu penses? J'espère qu'il y a de meilleures façons?
Réponses:
La bibliothèque de traitement d'image opencv le fait en enregistrant l'image et en la comparant à une image de référence - elle a un tas de fonctions de test c ++ et de macros pour gérer la correspondance approximative de l'image, etc.
la source
Votre infrastructure de test peut rendre son image de test dans un tampon, récupérer l'image rendue et la comparer à une image de référence "dorée" qui a été précédemment générée à cet effet.
Cela ne fonctionnera pas aussi bien dans les cas où les résultats de votre test ne devraient pas rester exactement les mêmes. Cependant, vous pouvez calculer la différence au carré des images de test et de référence et la comparer à un seuil.
Vous pouvez également prévoir la journalisation et la vérification des données de performances, car une régression majeure des performances est un autre mode d'échec possible.
la source
Même si vous ne pouvez pas comparer les images de sortie, au moins vous pourrez tester que vos rendus se terminent correctement (pas de plantage, de longues attentes, etc.). Bien sûr, il est préférable de trouver un moyen de vérifier les images, mais même sans cela, vous aurez tiré quelque chose des tests.
la source