22

JavaFX 8 アプリケーションの基本的な JUnit テストを作成したいと考えています。私はこの簡単なコードサンプルを持っています:

public class Main extends Application {
    public static void main(String[] args) {
        Application.launch(args);
    }
    @Override
    public void start(Stage primaryStage) {
        primaryStage.setTitle("Tabs");
        Group root = new Group();
        Scene scene = new Scene(root, 400, 250, Color.WHITE);
        TabPane tabPane = new TabPane();
        BorderPane borderPane = new BorderPane();
        for (int i = 0; i < 5; i++) {
            Tab tab = new Tab();
            tab.setText("Tab" + i);
            HBox hbox = new HBox();
            hbox.getChildren().add(new Label("Tab" + i));
            hbox.setAlignment(Pos.CENTER);
            tab.setContent(hbox);
            tabPane.getTabs().add(tab);
        }
        // bind to take available space
        borderPane.prefHeightProperty().bind(scene.heightProperty());
        borderPane.prefWidthProperty().bind(scene.widthProperty());

        borderPane.setCenter(tabPane);
        root.getChildren().add(borderPane);
        primaryStage.setScene(scene);
        primaryStage.show();
    }
}

これまでのところ、このコードしかありません:

import javafx.application.Application;
import javafx.stage.Stage;
import org.junit.BeforeClass;

public class BasicStart extends Application {

    @BeforeClass
    public static void initJFX() {
        Thread t = new Thread("JavaFX Init Thread") {
            @Override
            public void run() {
                Application.launch(BasicStart.class, new String[0]);
            }
        };
        t.setDaemon(true);
        t.start();
    }

    @Override
    public void start(Stage primaryStage) throws Exception {
        // noop
    }
}

上記のコードの JUnit テストを作成する方法を教えてください。

4

3 に答える 3

31

Junit ルールを使用して、JavaFX スレッドで単体テストを実行します。詳細はこの投稿にあります。その投稿からクラスをコピーして、このフィールドを単体テストに追加するだけです。

@Rule public JavaFXThreadingRule javafxRule = new JavaFXThreadingRule();

このコードは、JavaFX 2 と JavaFX 8 の両方で機能します。

于 2013-09-24T17:59:49.940 に答える
5

Brian Blonskiの回答に基づいて、本質的に同じことを行うJUnit-Testrunnerを作成しましたが、私の意見では少し使いやすいです。これを使用すると、テストは次のようになります。

@RunWith( JfxTestRunner.class )
public class MyUnitTest
{
  @Test
  public void testMyMethod()
  {
   //...
  }
}
于 2015-11-18T10:56:17.133 に答える