内部图形尚未在JUunit测试用例中初始化

时间:2016-09-19 22:07:05

标签: java canvas javafx junit graphicscontext

我正在使用JavaFx制作轻量级绘画应用程序。 我的LayerController课程及其addLayer等方面遇到了一些问题。所以我认为编写一些JUunit测试用例最好检查一下Jjunit测试用例的正确性。我的方法。为了简化故事,我在Canvas上使用GraphicsContext在我自称为PaintGraphics的自制课程中进行绘画。这堂课做了所有的绘画。 LayerController需要PaintGraphics才能在图层上执行其工作。但是当我在测试用例中发起GraphicsContext时似乎出了问题。我收到错误"内部图形尚未初始化。"。我猜这与GraphicsContext有关,但我不确定。任何有关错误发生原因的想法,以及如何解决它将非常感激!

测试的源代码如下所示:

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

1 个答案:

答案 0 :(得分:2)

异常&#34;内部图形尚未初始化。当JavaFX要求在使用某些功能之前首先初始化JavaFX平台时,通常会抛出&#34; Canvas。解决这个问题的方法如下:

  1. 创建一个扩展Application的小型模拟应用程序类,并在后台线程中启动它,这样JavaFX Application线程就可以正确初始化,而不会阻止你的测试线程。
  2. 使用JavaFX测试库,例如TestFX
  3. 您可以使用Mockito
  4. 模拟画布对象