2016-09-19 10 views
0

Je réalise une application de peinture légère avec JavaFx. J'ai eu quelques problèmes avec ma classe LayerController et ses méthodes addLayer etc Donc, je pensais que l'écriture de certains cas de test JUunit serait une bonne idée de vérifier l'exactitude de mes méthodes. Pour faire l'histoire courte, je peins sur un Canvas en utilisant son GraphicsContext dans un cours selfmade que j'appelle PaintGraphics. Cette classe fait toute la peinture. Le LayerController a besoin d'un PaintGraphics pour faire son travail sur les calques. Mais il semble que quelque chose ne va pas quand je lance un GraphicsContext dans un cas de test. Je reçois l'erreur "Les graphiques internes ne sont pas encore initialisés.". Ce que je suppose a quelque chose à voir avec le GraphicsContext mais je ne suis pas sûr. Toute idée de pourquoi l'erreur se produit, et comment la résoudre serait très appréciée!Graphiques internes non encore initialisés dans le cas de test JUunit

Le code source pour le test ressemble à ceci:

package view; 

import static org.junit.Assert.*; 

import java.util.ArrayList; 

import org.junit.Test; 

import controller.LayerController; 
import javafx.scene.canvas.Canvas; 
import javafx.scene.layout.AnchorPane; 
import model.Layer; 
import model.PaintGraphics; 

public class LayoutControllerTest { 

    Layer layer = new Layer(0, new Canvas(100,100)); 
    ArrayList<Layer> layers = new ArrayList<Layer>(); 
    PaintGraphics pGraphics = new PaintGraphics(layer.getCanvas().getGraphicsContext2D()); 
    LayerController layerController; 

    @Test 
    public void addLayerTest() { 
     layers.add(layer); 
     layerController.addLayer(layer, (AnchorPane)layer.getCanvas().getParent()); 
    } 
} 
+0

Désolé, je ne pas utiliser JavaFX et ne même pas l'environnement mis en place, je peux essayer test unitaire (En fait, je vraiment ne reconnaissent pas les paquets comme model.Layer - d'où vient-il? Je pense que tous les systèmes Java utiliseraient de meilleurs noms de paquets que «model», c'est indécent.) Cependant, l'erreur me fait penser à la façon dont vous exécutez JUnit. Si vous l'exécutez à partir de la ligne de commande sous Unix, il y a une chance que Java ne pense pas qu'il a une interface graphique (sans tête), désolé je ne peux pas être plus d'aide à moins que je puisse comprendre comment exécuter un auto- test contenu. –

+0

Ah, le modèle est mon paquet, et la classe de calque est une classe que j'ai faite moi-même. Ce code n'est pas supposé être capable de fonctionner pour les gens qui passent juste, c'est seulement pour donner une idée de ce que mon intention avec le cas de test est. L'unité est en cours d'exécution dans mon IDE, qui est Eclipse. Cette configuration fonctionne pour tout autre test que j'ai fait. Le test n'est pas complet et n'est pas censé fonctionner comme prévu, puisque l'erreur se produit de toute façon. – Skarsh

+0

Oh, désolé, aurait dû comprendre cela. Eh bien, je suggère que vous essayez de créer un cas de test qui peut être posté ici. Je ne pense pas que vous aurez à le poster cependant - l'acte de créer un cas de test minimal et isolé est souvent tout ce que vous devez faire pour résoudre le problème - c'est une bonne technique de dépannage. –

Répondre

2

L'exception "graphiques internes non initialisées encore." est généralement lancé lorsque JavaFX nécessite que la plate-forme JavaFX soit initialisée avant d'utiliser certaines fonctions, par ex. Canvas. Les approches pour résoudre ce sont énumérés ci-dessous:

  1. Faire une petite classe d'application simulée qui va Application et lancer dans un thread d'arrière-plan, de sorte que le fil d'application JavaFX peut initialiser correctement, alors que vous ne bloquez pas votre fil d'essai.
  2. Utilisez la bibliothèque de test JavaFX, par ex. TestFX
  3. Vous pourriez être en mesure de se moquer de l'objet canevas utilisant Mockito