2016-09-19 10 views
0

Я делаю легкое приложение для рисования с использованием JavaFx. У меня возникли проблемы с моим классом LayerController и его методами addLayer и т. Д. Поэтому я подумал, что писать некоторые тестовые примеры JUunit было бы хорошей проверкой правильности моих методов. Чтобы сделать рассказ коротким, я рисую на Canvas, используя его GraphicsContext в самодельном классе, который я называю PaintGraphics. Этот класс делает всю картину. LayerController нуждается в PaintGraphics, чтобы выполнить свою работу над слоями. Но кажется, что что-то пошло не так, когда я запускаю GraphicsContext в тестовом примере. Я получаю сообщение об ошибке «Внутренняя графика еще не инициализирована». Который, я думаю, имеет какое-то отношение к GraphicsContext, но я не уверен. Любые идеи о том, почему возникает ошибка, и как ее решить, будут очень признательны!Внутренняя графика еще не инициализирована в тестовом примере JUunit

Исходный код теста выглядит следующим образом:

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

К сожалению я не использую JavaFX и не имеете даже среда настроена таким образом, я могу попробовать свое модульное тестирование (На самом деле, я действительно не распознать пакеты, такие как model.Layer - где это? Я бы подумал, что любые Java-системы будут использовать лучшие имена пакетов, чем «model», это неприлично.) Однако ошибка заставляет задуматься, как вы используете JUnit. Если вы запускаете его из командной строки в Unix, есть вероятность, что Java не считает, что у него есть GUI (работает без головок), извините, я не могу помочь, если не смогу понять, содержащий тест. –

+0

А, модель - это мой пакет, а класс Layer - это класс, который я сделал сам. Этот код, как предполагается, не может запускаться для людей, просто бросающих их, это только дать намек на то, что мое намерение в тестовом случае. Устройство просто запускается в моей среде IDE, которая является Eclipse. Эта настройка работает для любого другого теста, который я сделал. Тест не завершен и не должен работать должным образом, так как ошибка все равно возникает. – Skarsh

+0

О, извините, должно было это понять. Хорошо, тогда я предлагаю вам попытаться создать тестовый пример, который можно опубликовать здесь. Я не думаю, что вам придется опубликовать его, хотя - для создания проблемы с изолированным минимальным тестовым случаем часто требуется всего, что нужно для решения этой проблемы - это хороший метод устранения неполадок. –

ответ

2

Исключение «Внутренние графики еще не инициализирована.» обычно генерируется, когда JavaFX требует, чтобы платформа JavaFX была инициализирована сначала перед использованием определенных функций, например. Canvas. Подходы к решению этого перечислены ниже:

  1. сделать крошечный макет класс приложения, который расширяет Application и запустить его в фоновом потоке, поэтому поток JavaFX приложений может правильно инициализировать, в то время как вы не заблокировать тестирование нити.
  2. Используйте библиотеку тестирования JavaFX, например. TestFX
  3. Вы могли бы издеваться объектом холста, используя Mockito