2

我正在用 JavaFx 制作一个轻量级的绘画应用程序。我的LayerController课程及其方法addLayer等一直存在一些问题。所以我认为编写一些 JUunit 测试用例来检查我的方法的正确性是一个好主意。简而言之,我正在Canvas使用它GraphicsContext在我称之为的自制课程中进行绘画PaintGraphics。这个班级完成了所有的绘画。LayerController需要在PaintGraphics图层上完成工作。GraphicsContext但是,当我在测试用例中启动 a 时,似乎出了点问题。我收到错误“内部图形尚未初始化。”。我猜这与the有关,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());
    }
}
4

1 回答 1

4

异常“内部图形尚未初始化”。当 JavaFX 要求在使用某些功能之前首先初始化 JavaFX 平台时,通常会抛出此错误,例如Canvas. 下面列出了解决此问题的方法:

  1. 制作一个小型模拟应用程序类,Application在后台线程中扩展和启动它,这样 JavaFX 应用程序线程就可以正确初始化,而不会阻塞测试线程。
  2. 使用 JavaFX 测试库,例如TestFX
  3. 您也许可以使用Mockito模拟画布对象
于 2016-09-21T09:58:31.967 回答