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



我正在用JavaFx制作一个轻量级的绘画应用程序。我一直有一些问题与我的LayerController类,它的方法addLayer等。因此,我认为编写一些jununit测试用例来检查我的方法的正确性是个好主意。为了使故事简短,我在一个自制的类,我称之为PaintGraphics,用它的GraphicsContextCanvas上作画。这个班完成了所有的绘画工作。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());
    }
}

异常"内部图形尚未初始化。"通常在JavaFX要求在使用某些特性(例如Canvas)之前先初始化JavaFX平台时抛出。解决这个问题的方法如下:

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

相关内容

  • 没有找到相关文章

最新更新