2016-09-19 10 views
0

私はJavaFxで軽量塗装アプリケーションを作成しています。 私はLayerControllerクラスでいくつかの問題を抱えていて、その方法はaddLayerなどです。そこで、JUunitのテストケースを書くことは、私のメソッドの正しさをチェックするのに良い考えです。物語を短くするために、私はPaintGraphicsと呼ぶ自画像クラスのGraphicsContextを使ってCanvasに絵を描いています。このクラスはすべてのペイントを行います。 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システムでは "モデル"よりも優れたパッケージ名が使われると思いますが、それは気まぐれです。)しかし、JUnitをどうやって実行しているのか疑問です。もしあなたがUnixのコマンドラインから実行しているのであれば、JavaがGUIを持っていないと思うかもしれません(ヘッドレスで走っています)、申し訳ありませんが、試験を含む。 –

+0

ああ、モデルは私のパッケージで、レイヤークラスは自分で作ったクラスです。このコードは、単に落とす人のために走らせることはできないと考えられています。テストケースの意図が何であるかのヒントを与えるだけです。 ユニットはEclipseのIDEで実行されているだけです。この設定は、私が作った他のテストにも有効です。エラーはとにかく発生するため、テストは完了しておらず、意図したとおりに動作するはずがありません。 – Skarsh

+0

ああ、申し訳ありませんが、それを理解したはずです。さて、ここに投稿できるテストケースを作成しようとお勧めします。私はあなたがそれを投稿しなければならないとは思わない - 孤立した、最小のテストケースを作成する行為は、多くの場合、問題を解決するために必要なすべてです - それは良いトラブルシューティング手法です。 –

答えて

2

例外は、通常、特定の機能を使用する前にJavaFXプラットフォームを初期化する必要がある場合にスローされます。 Canvas。これを解決するためのアプローチは以下の通りです:JavaFXのアプリケーションスレッドを正しく初期化することができますので、あなたのテストのスレッドをブロックしないながら

  1. は、Applicationを拡張し、バックグラウンドスレッドでそれを起動する小さなモックアプリケーションクラスを作成します。
  2. JavaFXテストライブラリを使用します。 TestFX
  3. あなたはMockito
関連する問題