java - rootpane - Pruebas sin rootear
rootpane para que sirve (20)
Nunca he visto esto, pero por lo que puedo ver al pasar por Google unos minutos, parece que podría ser un error en Eclipse en lugar de un problema con la prueba. Usted no tiene la anotación @Test en la prueba, supongo? ¿Puedes volar la prueba y recrearla, y si es así, obtienes el mismo error?
Cuando ejecuto todas mis pruebas en Eclipse (Eclipse 3.4 ''Ganímedes''), una prueba figura en la lista de "Pruebas sin enraizar". Estoy usando Junit 3.8 y esta prueba en particular extiende TestCase. No veo ninguna diferencia entre esta prueba y las otras pruebas. No recuerdo haber visto esto en Eclipse 3.3 (Europa).
Aclaración:
Todavía no nos hemos movido a JUnit 4.0, así que no estamos usando anotaciones. También busqué en Google y parecía que la mayoría de la gente tenía problemas con JUnit 4, pero no vi ninguna solución. En este punto, la prueba pasa tanto a nivel local como en CruiseControl, así que no estoy demasiado preocupado, pero sí curioso.
La primera vez que vi esto, sin embargo, fue en una prueba fallida que solo falló cuando se ejecutó con otras pruebas. Esto me condujo por el agujero de la madriguera en busca de una solución al problema "sin raíz" que nunca encontré. Eventualmente encontré al culpable en otra prueba que no estaba derribando adecuadamente.
Estoy de acuerdo, parece un problema de Eclipse.
Si su clase extiende TestCase en algún lugar de su jerarquía, debe usar el corrector de prueba JUnit 3 que figura en la lista desplegable en las configuraciones de ejecución. Usar el corredor JUnit 4 (el valor predeterminado, en mi opinión) hace que ocurra ese fenómeno de prueba sin rastrear.
Finalmente encontré la solución. El problema es que no está definiendo sus casos de prueba usando anotaciones, pero todavía lo está haciendo de la "vieja manera". Tan pronto como convierta a usar anotaciones, podrá ejecutar una prueba a la vez.
Aquí hay un ejemplo de cómo debería verse ahora una prueba básica usando anotaciones:
import static org.junit.Assert.*; // Notice the use of "static" here
import org.junit.Before;
import org.junit.Test;
public class MyTests { // Notice we don''t extent TestCases anymore
@Before
public void setUp() { // Note: It is not required to call this setUp()
// ...
}
@Test
public void doSomeTest() { // Note: method need not be called "testXXX"
// ...
assertTrue(1 == 1);
}
}
Podría solucionar el problema pasando de TestRunner versión 4.0 a 3 en configuraciones de ejecución para el método de prueba individual.
No extienda junit.framework.TestCase en su clase de prueba con junit1.4 y esto debería resolver el problema
¿Estás usando Hamcrest? u otra biblioteca para ayudar en tu prueba ?. Usted no está usando
import static org.junit.Assert.*;
Compruebe si en su prueba utiliza:
import static org.hamcrest.MatcherAssert.assertThat;
u otra afirmación no es JUnit assert.
Recibí el mensaje de error "pruebas sin raíz" también y desapareció mágicamente. Creo que fue debido al hecho de que estaba usando Eclipse con un proyecto de Maven. Cuando agregué un nuevo método a mi clase de prueba y le di la anotación @Test, comenzó a recibir el mensaje de error cuando traté de ejecutar ese método con la opción de menú "Ejecutar como prueba de junio"; sin embargo, una vez que ejecuté una construcción maven desapareció el mensaje de pruebas sin rootear y creo que esa es la solución al problema en el futuro.
Ejecuta una construcción maven porque actualizará la clase que JUnit está utilizando.
Solucionamos el problema asegurándonos de que se construyera nuestro proyecto de prueba. Tuvimos un problema en la ruta de compilación que no permitía compilar nuestra clase de prueba. Una vez que resolvimos el problema de compilación, compilamos la prueba y pudimos ejecutar el método "nuevo". Entonces, podemos suponer que las pruebas "sin raíz" también significan que no existen en el binario compilado.
Otro escenario que causa este problema fue copiar / pegar ciegamente un método que requiere un parámetro . es decir
import org.junit.Test;
public class MyTest {
@Test
public void someMethod(String param) {
// stuff
}
}
Usted tiene algunas soluciones simples:
definir la variable en el método de prueba específico
agréguelo como una variable de instancia a la clase de prueba
crea un método de configuración y
@Before
con@Before
Resultó ser que mi ruta de compilación tenía algún error ... faltaban algunas jarras. ¡He reconfigurado la ruta de compilación y funcionó!
Para mí, el problema era que se lanzaba una excepción en los métodos @BeforeClass
o @AfterClass
. Esto también hará que las pruebas se clasifiquen como sin raíz.
Para mí, fue debido a los problemas de ruta de compilación del proyecto. Mi configuración de dependencias maven necesita ser actualizada.
¡Tuve ese problema y puse uno " @Test " antes de que el método de prueba lo resolviera!
Me gusta esto:
@Test public void testOne() { // ... assertTrue(1 == 1); }
Obtuve este error con el nombre del método de prueba como "prueba"
@Test
public void test() {
// ... assertTrue(1 == 1);
}
Cambié el nombre del método y funcionó
Estos son los dos escenarios que muestran los errores desenredados.
Si se perdió la anotación @Test antes de la prueba.
@Prueba
public void foo () {}
Si se trata de un proyecto Gwt y cuando se definen dos simulacros del mismo objeto. Digamos que hay una clase Clase A y
@GwtMock private Atest;
@GwtMock private A a; Entonces, esto también mostrará un error de prueba sin raíz.
Me encontré con este problema al no declarar también que la prueba es static
.
Otra cosa que puedes intentar es actualizar tu versión de JUnit a al menos 4.12.
Estaba experimentando este problema por un tiempo con una clase que extendía uno que usaba @RunWith (Parameterized.class).
Después de un tiempo, y lamento no saber exactamente qué hice para provocar esto, el mensaje "Pruebas sin enrojecimiento" desapareció, pero la prueba aún no se ejecutó correctamente. El constructor que debería haber aceptado argumentos del método @Parameters nunca fue llamado; la ejecución saltó directamente de @BeforeClass a @AfterClass.
La solución para ese problema fue actualizar JUnit del 4.8.1 que estaba utilizando, a la última (4.12). Entonces tal vez eso podría ayudar a alguien más en el futuro.
Obtuve este error porque cambié el nombre de mi método de prueba y luego intenté ejecutar la prueba en Eclipse haciendo clic en la misma configuración de ejecución, refiriéndome al método antiguo que ahora no existía.
Tal vez solo sea una confusión lógica sobre el objetivo del método. Recordemos:
Por ejemplo, método de prueba correcto etiquetado:
@Test
@Transactional
@Rollback(true)
public void testInsertCustomer() {
(...)
}
-Con plugin Eclipse Junit, puede ejecutar ese método de prueba usando el menú contextual sobre el método (Ej. En el explorador de paquetes expandiendo la clase y métodos y seleccionando el método "testInsertCustomer ()" y desde ese elemento seleccionando "Ejecutar como >> prueba JUnit") .
Si olvidó la etiqueta "@Test", o simplemente el método no es una prueba, sino un método (privado o no) común para usar como utilidad para las otras pruebas (por ejemplo, "private fillCustomerObject ()"), entonces el método no lo hace requiere la etiqueta "@Test", ¡y simplemente no puede ejecutarla como una prueba de JUnit!
Es fácil que pueda crear un método de utilidad y más tarde olvide el objetivo real de ese método, por lo que si intenta ejecutarlo como una prueba, JUnit gritará "Pruebas sin enraizar".
Tuve el mismo problema con java.lang.NoClassDefFoundError: org / hamcrest / SelfDescribing
necesitas el jar Hamcrest. misma pregunta 14539072: java.lang.NoClassDefFoundError: org / hamcrest / SelfDescribing