es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo hacer pruebas JUnit para JavaFX

Estaba tratando de ejecutar una prueba de junit de javafx. Sin embargo, tuve problemas porque no se ejecutaba la prueba en el hilo de javafx. Así que hice lo que decía la respuesta de esta pregunta (https://stackoverflow.com/questions/18429422/basic-junit-test-for-javafx-8). Sin embargo, ahora estoy obteniendo este error en mi clase de junit y no sé cómo solucionarlo.

Exception in thread "Thread-0" java.lang.NoClassDefFoundError: javafx/embed/swing/JFXPanel
    at TestJunit$1.run(TestJunit.java:26)
    at java.base/java.lang.Thread.run(Thread.java:832)
Caused by: java.lang.ClassNotFoundException: javafx.embed.swing.JFXPanel
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:606)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:168)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
    ... 2 more

También aquí está mi archivo junit si ayuda.

import org.junit.Test;
import javafx.animation.AnimationTimer;
import javafx.application.Platform;
import javafx.embed.swing.JFXPanel;
import Champions.autoBattleChampion;
import Model.autoBattleModel;

import static org.junit.Assert.assertEquals;

import org.junit.BeforeClass;
import org.junit.Rule;

public class TestJunit {

    /*
    * <== Test Model ==>
    */
   @Test
   public void testpopulateChampionStore_0() {
       Thread thread = new Thread(new Runnable() {

           @Override
           public void run() {
               new JFXPanel(); // Inicializa la plataforma JavaFx
               Platform.runLater(new Runnable() {

                   @Override
                   public void run() {
                      autoBattleModel model = new autoBattleModel();
                      model.stopTimer();
                      assertEquals(1,1);

                   }
               });
           }
       });
       thread.start();// Inicializa el hilo
       try {
        Thread.sleep(10000);
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } // Tiempo para usar la aplicación, sin esto, el hilo será interrumpido antes de que puedas decir.
}

}
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El error que estás recibiendo indica que no se puede encontrar la clase javafx.embed.swing.JFXPanel. Esta clase es necesaria para ejecutar aplicaciones JavaFX, incluyendo pruebas JUnit que utilizan JavaFX.

    Para resolver este problema, debes asegurarte de que las bibliotecas JavaFX requeridas estén incluidas en tu classpath de prueba. Puedes hacer esto agregando el siguiente argumento VM al ejecutar la prueba JUnit:

    --module-path /ruta/hacia/bibliotecas/javafx --add-modules javafx.controls,javafx.fxml
    

    Reemplaza /ruta/hacia/bibliotecas/javafx con la ruta real a las bibliotecas JavaFX en tu sistema.

    Alternativamente, puedes configurar tu herramienta de construcción (por ejemplo, Maven, Gradle) para incluir las dependencias de JavaFX en tu classpath de prueba.

    Una vez que las bibliotecas JavaFX estén incluidas en tu classpath, la clase javafx.embed.swing.JFXPanel debería poder encontrarse y tu prueba JUnit debería ejecutarse correctamente.

Comments are closed.