Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Basic JUnit test for JavaFX 8

Tags:

I want to create basic JUnit test for JavaFX 8 application. I have this simple code sample:

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();     } } 

I only have this code so far:

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     } } 

Can you tell me how I can create JUnit test for the above code?

like image 743
Peter Penzov Avatar asked Aug 25 '13 13:08

Peter Penzov


1 Answers

I use a Junit Rule to run unit tests on the JavaFX thread. The details are in this post. Just copy the class from that post and then add this field to your unit tests.

@Rule public JavaFXThreadingRule javafxRule = new JavaFXThreadingRule(); 

This code works for both JavaFX 2 and JavaFX 8.

like image 111
Brian Blonski Avatar answered Sep 30 '22 18:09

Brian Blonski