【问题标题】:Internal graphics not initialized yet in JUunit test caseJUunit 测试用例中尚未初始化的内部图形
【发布时间】:2017-01-27 17:07:57
【问题描述】:

我正在使用 JavaFx 制作一个轻量级的绘画应用程序。 我的LayerController 类及其方法addLayer 等一直存在一些问题。所以我认为编写一些JUunit 测试用例来检查我的方法的正确性是一个好主意。简而言之,我在一个名为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,甚至没有设置环境,所以我可以尝试你的单元测试(事实上,我真的不认识像 model.Layer 这样的包 - where这是来自??? 我认为任何 Java 系统都会使用比“模型”更好的包名称,这很不雅。)但是这个错误让我想知道你是如何运行 JUnit 的。如果您在 Unix 中从命令行运行它,Java 有可能认为它没有 GUI(无头运行),抱歉,除非我能弄清楚如何运行自包含测试。
  • 啊,model是我的包,Layer类是我自己做的类。这段代码不应该能够为刚刚路过的人运行,它只是为了暗示我对测试用例的意图是什么。该单元只是在我的 IDE(即 Eclipse)中运行。此设置适用于我所做的任何其他测试。测试未完成,并且不应该按预期工作,因为无论如何都会发生错误。
  • 哦,对不起,应该知道的。那么,我建议您尝试创建一个可以在此处发布的测试用例。不过我认为您不必发布它——创建一个孤立的、最小化的测试用例通常是解决问题所需要做的一切——这是一种很好的故障排除技术。

标签: java canvas javafx junit graphicscontext


【解决方案1】:

"Internal graphics not initialized yet." 异常通常在 JavaFX 要求在使用某些功能之前先初始化 JavaFX 平台时引发,例如Canvas。下面列出了解决此问题的方法:

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

【讨论】:

  • 自 java 9 发布以来,startup()stop() Java 平台都可以使用 Platform 方法,因此它们可能比创建一个小型模拟 Application 或使用 @ 更可取987654332@强制Java平台启动。
猜你喜欢
  • 2015-03-06
  • 1970-01-01
  • 1970-01-01
  • 2020-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-10
相关资源
最近更新 更多