Test unitaire des classes utilisant libgdx

J’écris un jeu sur libgdx; J’utilise le framework Junit pour simplifier les tests unitaires de mon code. Il existe maintenant une partie du code (un générateur de carte, une classe convertissant mon propre format de carte en TiledMap …) que je dois tester de manière approfondie, mais qui utilise le code libgdx: de la gestion des fichiers au chargement des actifs. Je ne prévois pas de tester la sortie graphique réelle, ni le jeu lui-même, de cette façon: mais je veux tester les composants simples (calcul, access aux actifs, etc.) pour éviter les erreurs flagrantes.

J’ai essayé de faire quelque chose comme ça dans la méthode “setUpBeforeClass”:

LwjglApplicationConfiguration cfg = new LwjglApplicationConfiguration(); cfg.useGL20 = true; cfg.width = 480; cfg.height = 320; cfg.resizable = true; LwjglApplication app = new LwjglApplication( new TestApplicationListener(), cfg); 

Et en appelant dans tearDownAfterClass ():

  Gfx.app.exit() 

Mais cela crée une fenêtre dont je n’ai pas besoin et qui semble exagéré alors que tout ce dont j’ai besoin est la gestion des fichiers initialisée. Existe-t-il un meilleur moyen d’initialiser les composants libGDX sans créer un object d’application complet? Merci.

MODIFIER

En revenant dessus (grâce à Sam dans les commentaires), je me rends compte que l’access au GL est nécessaire (le chargement des actifs le requirejs), mais cette approche ne semble pas fonctionner: la bibliothèque graphique ne semble pas être initialisée. La documentation GDX n’a ​​pas aidé. Un indice?

On n’a pas répondu à cette question et je suis surpris que personne n’ait signalé le système sans tête , ce qui est idéal pour cette situation. Combinez cela avec votre bibliothèque moqueuse préférée et vous devriez être prêt à partir.

 public class HeadlessLauncher { public static void main(final Ssortingng[] args) { final HeadlessApplicationConfiguration config = new HeadlessApplicationConfiguration(); config.renderInterval = Globals.TICK_RATE; // Likely want 1f/60 for 60 fps new HeadlessApplication(new MyApplication(), config); } } 

Comme nous l’avons déjà montré, il existe un backend HeadlessApplication qui vous donne un libGDX initialisé mais qui n’a pas de contexte OpenGL. Pour travailler avec OpenGL, vous avez en effet besoin du backend LwjglApplication qui crée une fenêtre OpenGL.

Si vous rencontrez des problèmes lors de la rédaction de tests reposant sur le contexte OpenGL, gardez à l’esprit qu’OpenGL est uniquement lié au thread de votre LwjglApplication, ce qui n’est pas le pas de vos tests . Vos tests doivent appeler Gdx.app.postRunnable(Runnable r) pour accéder au thread avec le contexte OpenGl.

Vous souhaiterez peut-être utiliser synchronized et CountDownLatch pour suspendre le test en attendant que votre application exécute la commande.