No se encontraron pruebas con el corredor de pruebas 'JUnit 4'

105

Mi prueba de Java funcionó bien desde Eclipse. Pero ahora, cuando reinicio la prueba desde el menú de ejecución, aparece el siguiente mensaje:

No tests found with test runner 'JUnit 4'

En el .classpatharchivo tengo todos los jararchivos, y al final tengo:

<classpathentry exported="true" kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/4"/>
    <classpathentry kind="output" path="bin"/>
</classpath>

¿Cómo puedo resolver este error y volver a ejecutar las pruebas?

user281070
fuente
1
¿Puedes publicar el contenido de tu prueba (o al menos la declaración de la clase)? También escribiste "al final tienes:" sin nada más.
phtrivier
marque este ... debería ayudar a stackoverflow.com/questions/22469480/junit-no-tests-found
prasad vsv
Para el 5 de junio, consulte aquí
Anand Rockzz

Respuestas:

155

esto me acaba de pasar. Reconstruir o reiniciar Eclipse no ayudó.

Lo resolví cambiando el nombre de uno de los métodos de prueba para comenzar con "prueba ..." (estilo JUnit3) y luego se encuentran todas las pruebas. Le cambié el nombre de nuevo a lo que era anteriormente, y todavía funciona.

Alemán
fuente
7
Tengo un método como testQuotesjunto con otros métodos que no comienzan con la prueba pero aún así obtengo el error No se encontraron pruebas
Rachel
1
Tuve el mismo problema con una clase que se extiende junit.framework.TestCasey mis métodos debían comenzar con "prueba". En lugar de extender TestCase, agregué una importación: import static org.junit.Assert.*;y puedo nombrar mis métodos como quiero. Bizarre ...
MrDrews
6
En serio, incluso si una prueba está anotada con @Test, ¿el nombre de la función de prueba aún debe tener el prefijo "prueba"?
Brian Shotola
4
También puede agregar 2015 y Eclipse Luna a esa lista. En realidad, muchos de mis métodos @Test todavía comienzan con el prefijo "prueba". I quitado ese prefijo en una prueba, salvo, y luego se encontró que todas las pruebas. Luego lo volví a agregar y se continuaron encontrando todas las pruebas. Parece que se trata más de cambiar un método (¿archivo?) De modo que Eclipse vuelva a descubrir todo.
Brian White
2
Android Studio 2.1.1, mayo de 2016, todavía funciona. Me pregunto si esta respuesta funcionará hasta el fin del universo.
Blueriver
42

Cuando obtenemos estos errores, parece que Eclipse está confundido. Reinicie Eclipse, actualice el proyecto, límpielo, deje que Eclipse lo reconstruya y vuelva a intentarlo. La mayoría de las veces eso funciona a las mil maravillas.

JamesG
fuente
1
Sí, también funcionó para mí y estoy de acuerdo con dlamblin. Un buen recordatorio para intentar siempre reiniciar por cualquier problema extraño que no se pueda resolver en los primeros 5 minutos de pinchazo.
Thien
3
Tuve este problema y cerré el archivo fuente donde había definido mi clase de prueba, hice doble clic en ese archivo en el navegador y funcionó. Así que cerrar y volver a abrir el archivo funcionó, sin reiniciar Eclipse.
metamatt
11
esto realmente me hace querer buscar un nuevo IDE. esto funcionó para mí.
Seth M.
1
cerrando y reabriendo el proyecto me lo arregló!
Martin Charlesworth
34

En el menú contextual de su directorio 'prueba', elija 'Ruta de compilación' -> 'Usar como carpeta de origen'. Eclipse debería ver sus archivos unitTests.java como archivos fuente. La advertencia 'No se encontraron pruebas de JUnit' ocurre porque no hay archivos unitTests.class en su directorio de 'compilación'

Dima
fuente
Esta es la solución que me funciona. Reiniciar no funciona.
Andree
Esto es lo que buscaba, ya que tengo que tener la carpeta "test" no en la carpeta "src". Hice esto, luego abrí / cerré el proyecto como lo sugirieron las otras respuestas y ahora se compila y se ejecuta como una prueba JUnit. ¡Gracias!
quux00
Hice lo mismo seleccionando el proyecto -> Ruta de compilación de Java -> Fuente -> agregar la carpeta de prueba. ¡Muchas gracias!
Peter Clause
Si src / test / groovy ya está en su ruta de compilación como carpeta de origen, elimínelo y luego agréguelo nuevamente. Más fácil que eliminar y reemplazar @Test en cada archivo de prueba ...
geneSummons
32

Compruebe si su clase de prueba se extiende a "TestCase". si es así, elimine esa cláusula. Su clase no necesita extenderse desde la clase "TestCase". Son la mayoría de los casos que he conocido.

public class MyTestCase extends TestCase{
  @Test
  public void checkSomething() {
    //...
  }
}
//Result> AssertionFailedError: No test Found in MyTestCase

Seguir TestCase debería estar bien.

public class MyTestCase {
  @Test
  public void checkSomething() {
    //...
  }
}
//Works fine
nephilim
fuente
De hecho, es la respuesta correcta. ¡Lo probé con IntelliJ y JUnit 4.1 y funciona!
Dio Phung
El problema al que me enfrento es que, en eclipse, mis pruebas de JUnit funcionan bien, pero cuando las exporto a un JAR, aparece el error anterior. ¿Algunas ideas?
tryToLearn
¿Es al revés estos días? Agregar "extiende TestCase" resolvió el problema para mí.
Heinzlmaen
¡¡¡Trabajó para mi!!! Gracias
JRichardsz hace
27

Estaba enfrentando el mismo problema y lo depuré en malos ejemplos en la web y en los componentes internos de junit. Básicamente, no hagas que tu clase extienda TestCase como muestran algunos ejemplos para Junit 4.x. Use alguna prueba de convención de nomenclatura o si desea tener una anotación, puede usar @RunWith (JUnit4.class).

Si necesita acceso para afirmar métodos, extienda Assert o use importaciones estáticas.

Si su clase extiende TestCase, incluso si usa Junit 4 Runner, se ejecutará como 3. Esto se debe a que en el código de inicialización hay detección:

Vea JUnit3Builder y las líneas:

boolean isPre4Test(Class<?> testClass) {
    return junit.framework.TestCase.class.isAssignableFrom(testClass);
}

Esto devuelve verdadero y no se intentará la prueba de compatibilidad con junit4.

toomasr
fuente
2
Esto resolvió mi problema. Si está mirando los ejemplos más antiguos de cómo usar Junit primero, lo llevarán por mal camino.
Alex Kilpatrick
"Si su clase extiende TestCase, incluso si usa Junit 4 Runner, se ejecutará como 3"; esto no es cierto (al menos para Groovy e Intellij IDEA). Estoy usando JUnit 4.12, y he anotado la clase con @RunWith(JUnit4)"GroovyTestCase" y la he extendido. Sin @RunWith(JUnit4)yo enfrento los mismos problemas.
Veaceslav Gaidarji
El comportamiento sigue siendo el mismo que en 2017 (JUnit 4.12).
Sharmaap
5

Intenta agregar

@Test por encima del método para la prueba como esta

@Test
public void testParse()
{

}
Mike Choi
fuente
5

Otra posible solución que lanzaré al ring: no pude ejecutar la clase de prueba ni desde la ventana del editor ni desde el Explorador de paquetes, pero hice clic derecho en el nombre de la clase en la vista Esquema y seleccioné Ejecutar como JUnit La prueba funcionó ... ¡Imagínate!

Matthew Wise
fuente
Lo mismo, desde la vista de esquema, funciona, todo lo demás no; he probado todas las soluciones publicadas en 3 subprocesos de desbordamiento de pila, nada funciona
MPSL
Esto también funciona para mí, pero es inútil para probar la cobertura en un proyecto.
rico
4

No hay trajes de prueba en JUnit4. En su lugar, utilice anotaciones o utilice las antiguas convenciones de nombres de JUnit3.

Ejemplo:

@RunWith(Suite.class)
@SuiteClasses({YourClassWithTests.class})
Romano C
fuente
4

Esto también me pasó a mí. Intenté reiniciar Eclipse y también prefijé mis métodos de prueba con pruebas. Ninguno de los dos funcionó.

El siguiente paso funcionó: cambie todos sus métodos de prueba presentes en @BeforeClass y @AfterClass a métodos estáticos.

es decir, si tiene su método de prueba en el siguiente formato:

@BeforeClass
public void testBeforeClass(){
}

luego cámbielo a:

@BeforeClass
public static void testBeforeClass(){
}

Esto funcionó para mí.

revindran
fuente
4

He descubierto la respuesta:

Recibí este error cuando ejecuté la prueba de forma independiente desde eclipse (haga clic derecho en el método y elija ejecutar como prueba junit),

Cuando ejecuté la clase completa como prueba junit, la prueba se ejecutó correctamente con los parámetros.

Eyal Zamir
fuente
3

Cuando me enfrento a este problema, simplemente edito el archivo y lo guardo ... funciona a la perfección

Mahesh
fuente
1
Hola amigo y bienvenido a Stackoverflow. :) ¿Podría elaborar su respuesta?
Littm
@Mahesh Te refieres a actualizar el archivo (selecciónalo y presiona F5)
Cassian
Estoy enfrentando el mismo problema de scala, es decir, mis pruebas están escritas para JUnit4 pero están en scala. Y la solución, como sugiere @Mahesh, es darle una patada al compilador. No importa lo que hagas cuando edites el archivo, solo tienes que editarlo. Escribo algo que da un error de sintaxis, guardo el archivo, luego deshago y guardo nuevamente. De repente se ejecutan mis pruebas. Esto me sucede con frecuencia, es decir, al menos todos los días, generalmente varias veces al día.
Erick G. Hagstrom
3

Mi problema fue que la declaración import org.junit.Test;desapareció (¿o no se agregó?). Después de agregarlo, tuve que eliminar otra importdeclaración (Eclipse le indicará cuál) y todo comenzó a funcionar nuevamente.

Sergii
fuente
3

Muy tarde, pero lo que me resolvió el problema fue que todos los nombres de los métodos de prueba comenzaban con letras captiales: "prueba pública nula". Haciendo la t minúscula funcionó.

Josh T
fuente
esto funciona para mí ... pero esta es una solución extrañamente confusa
Anchit Mittal
2

Probé la solución de Germán. Funcionó para todo el método de mi clase, pero tengo muchas clases en mi proyecto.

Así que intenté eliminarlo de la ruta de compilación y luego volver a agregarlo. Funcionó perfectamente.

Espero eso ayude.

Footix29
fuente
2

Seis años después ... y todavía hay problemas con Eclipse y ocasionalmente no se encuentran JUnits.

En mi Eclipse Mars 2 descubrí que no reconocerá las clases de prueba extraídas de git si hay más de 9 o 10 @Testanotaciones en el archivo. Necesito comentar las pruebas adicionales, ejecutar la clase de prueba, luego descomentarlas y volver a ejecutar la clase. Imagínate...

SimonB
fuente
Esta respuesta aquí es útil, no tuve exactamente la misma situación, pero los nombres de los métodos de prueba eran bastante similares y Eclipse tuvo problemas para encontrarlos. Como testCase01, testCare02 ... Tuve que comentar otros métodos "testCasexx" para ejecutar testCase01 o de lo contrario arroja una excepción. ¡Hacer que todos los métodos de prueba sean PÚBLICOS parece haber resuelto este problema!
01000001
1

Puede ser que su configuración de lanzamiento de JUnit fuera para una clase de prueba individual, y de alguna manera cambió esa configuración para "ejecutar todas las pruebas en una carpeta, paquete o proyecto de origen"

Pero eso podría desencadenar el mensaje de error "No se encontraron pruebas con el corredor de pruebas 'JUnit 4'".

O hizo una modificación en su clase de prueba, eliminando la @Testanotación.
Vea esta página wiki .

VonC
fuente
@Test está aquí, el mensaje es: no se pudo encontrar la clase principal toto.lolo.testrunner (que se especifica en la configuración de ejecución)
user281070
@lamisse: entonces, ¿algún tipo de problema de classpath? o un problema de sintaxis: debería ser toto.lolo.Testrunnery no toto.lolo.testrunner('T')
VonC
@lamisse: ¿es "toto.lolo.Testrunner" el nombre real de su clase TestRunner? ¿Es algo que escribiste? ¿El proyecto / jar lo contiene en la ruta de clase de su configuración de lanzamiento?
phtrivier
1

También enfrenté el mismo problema mientras ejecutaba la prueba JUnit. Resolví esto colocando la anotación @Test justo encima de la función de prueba principal.

Rajith
fuente
1

Lo que solucionó mi caso fue similar a la respuesta de @ JamesG: reinicié Eclipse, reconstruí el proyecto y lo actualicé; PERO antes de hacer algo de eso, primero cerré el proyecto (haga clic derecho en el proyecto en el explorador de paquetes -> Cerrar proyecto) y luego lo volví a abrir. Entonces funcionó.

Una solución alternativa que encontré antes de encontrar la solución definitiva que acabo de describir: copie la clase de prueba y ejecute la clase de prueba como JUnit.

cellepo
fuente
1

Compruebe si la carpeta en la que se encuentran sus pruebas es una carpeta de origen. Si no es así, haga clic derecho y utilícelo como carpeta de origen.

Todor Kolev
fuente
1

Cerrar y abrir el proyecto funcionó para mí.

usuario3022123
fuente
1

Existe otra posibilidad, es posible que haya cambiado Junit Test de una versión inferior (por ejemplo, Junit 3) a Junit 4. Es así que siga los pasos a continuación: -

1. Right Click on class
2. Select Run as >> "Run Configurations"
3. Check your "Test Runner" option in new window
4. If it not same as maven change it for example change it as Junit 4.
Kundan Atre
fuente
1

Agregue @Testen la parte superior de su prueba.
Coloca el mouse sobre la anotación.
Elija 'agregar biblioteca junit 4 a classpath'

Miguel
fuente
0

¿Su proyecto Eclipse está basado en maven? Si es así, es posible que deba actualizar la versión de m2eclipse.

Solo una nota rápida: tengo un proyecto en Eclipse que está basado en maven y se generó inicialmente usando el asistente de "nuevo proyecto maven" en Eclipse. Estoy usando JUnit 4.5 para las pruebas unitarias, y podría ejecutar las pruebas desde la línea de comandos usando maven, y las pruebas individuales de Eclipse usando ejecutar como prueba JUnit ... Sin embargo, cuando intenté ejecutar todas las pruebas en el proyecto al invocar ejecutar como prueba JUnit ... en el nodo raíz del proyecto, Eclipse se quejó de que " no se encontraron pruebas con el corredor de pruebas junit 4 ". Resuelto mediante la actualización de m2eclipse a la última compilación de desarrollo estable desde el sitio de actualización de m2eclipse (específicamente, actualicé de la versión 0.9.8.200905041414 a la versión 0.9.9.200907201116 en Eclipse Galileo).

Desde aquí: http://nuin.blogspot.com/2009/07/m2eclipse-and-junit4-no-tests-found.html

caldo
fuente
No lo entiendo, no creo que esté relacionado con la versión eclispe, mi prueba funcionó ayer y no es el caso ahora debido a la ventana emergente de lanzamiento de Junit, ¿hay alguna manera de restablecer mi primera configuración?
user281070
Lamisse, yo también estoy confundido. Le sugiero que actualice su pregunta para explicar cuándo funciona la prueba unitaria y cuándo no.
b.roth
0

Esto me pasó a mí también. Descubrí que en Eclipse no hice un nuevo archivo de clase Java y por eso no estaba compilando. Intente copiar su código en un archivo de clase Java si aún no está allí y luego compile.

Anna
fuente
0

Descubrí que Eclipse parece realizar solo pruebas de estilo JUnit 3 si su clase de prueba se extiende desde TestCase. Si quita la herencia, las anotaciones funcionaron para mí.

Tenga en cuenta que debe importar estáticamente todos los assert*métodos necesarios como import static org.junit.Assert.*.

Martín C.
fuente
0

Tuve que hacer una limpieza de mvn en la línea de comandos y luego proyectar-> limpiar en eclipse. Cambié el nombre de la clase de antemano y luego lo cambié de nuevo, pero dudo que haya ayudado.

Joe al otro lado
fuente
0

También estoy ejecutando Eclipse con Maven (m2e 1.4). Las pruebas se estaban ejecutando con Maven, pero no con Eclipse ... incluso después de varias aplicaciones de Maven>Update project.

Mi solución fue agregar algunas líneas en el .classpath generado por m2e. Las líneas ahora se pegan.

<classpathentry kind="src" output="target/test-classes" path="src/test/java">
  <attributes>
    <attribute name="optional" value="true"/>
    <attribute name="maven.pomderived" value="true"/>
  </attributes>
</classpathentry>
pascal
fuente
0

Tengo este problema de vez en cuando. Lo que más me resuelve el problema es ejecutar la prueba JUnit desde las configuraciones de ejecución ... asegurándome de que JUnit 4 esté configurado como el ejecutor de pruebas.

Generalmente, veo este problema cuando intento Ejecutar como ... prueba Junit desde el menú contextual en el Explorador de paquetes. Si hace clic con el botón derecho en el código de la prueba que está intentando ejecutar y en lugar de seleccionar Ejecutar como ... Prueba de Junit, selecciona Ejecutar configuraciones ... asegúrese de que el Proyecto, la Clase de prueba y el corredor de prueba estén configurados correctamente, haga clic en Aplicar y luego ejecutar trabaja todo el tiempo para mí.

theINtoy
fuente
0

Comencé a trabajar con Selenium y Eclipse en mi trabajo y estaba haciendo mi primera prueba automatizada y eliminé del código las notas @Before, @Test y @After y estaba teniendo este problema "No se encontraron pruebas con el corredor de pruebas junit4" .

Mi solución fue simplemente agregar nuevamente las notas @Before, @Test y @After y con eso funcionó mi script. Es importante no borrar esto del código.

Esta es una prueba simple que usa Google para buscar algo:

import java.util.regex.Pattern;
import java.util.concurrent.TimeUnit;

import org.junit.*;

import static org.junit.Assert.*;
import static org.hamcrest.CoreMatchers.*;

import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.Select;

public class TestingClass {

    private WebDriver driver;
    //Creates an instance of the FirefoxDriver
    **@Before**
    public void SetUp() throws Exception {
        driver = new FirefoxDriver();
    }

    **@Test**   
    //Search using keyword through Google Search
    public void TestTestClass2 () throws Exception {
        driver.get("http://www.google.com.mx/");
        driver.findElement(By.name("q")).sendKeys("selenium");
        Thread.sleep(10000);
        driver.findElement(By.name("btnG")).click();
        Thread.sleep(10000);
    }

    //Kill all the WebDriver instances
    **@After**
    public void TearDown() throws Exception {
        driver.quit();
    }

}
JuanTorre
fuente
0

Usando ScalaIDE (3.0.4-2.11-20140723-2253-Typesafe) estaba teniendo un problema similar con el Right Click Scala Test Class-> Run As -> Scala Junit Testmenú contextual.

Intenté editar la clase (pero no por una falla de compilación), limpiar, cerrar el proyecto, cerrar Eclipse. Ninguno de ellos trabajó para restaurar el menú contextual de las clases que anteriormente habían funcionado bien. Las clases de prueba no usan la @Testanotación y en su lugar usan la @RunWith(classOf[JUnitRunner])anotación en la parte superior de la clase usando el código ScalaTest.

Cuando intenté elegir Scala Junit Test directamente desde el editor de inicio Ejecutar configuración, recibí el cuadro de diálogo de la pregunta. La respuesta de Footix29 fue la clave para mí.

Noté que a pesar de que había limpiado mi proyecto varias veces, mis clases en el directorio / bin no habían sido reconstruidas en un tiempo.

Así es como recuperé el menú contextual y pude ejecutar una vez más Scala Junit Tests:

  • manuallylimpió las clases eliminando el /bin/<package dir>*via Explorer
  • Project -> Cleaned el proyecto junto con una reconstrucción completa

Sospecho que una edición de clase en general puede limpiar algún estado guardado de Eclipse y hacer que funcione nuevamente. En mi caso, todas las clases trabajadoras que probé anteriormente habían fallado, por lo quemanual paso limpio fue el martillo que necesitaba. Sin embargo, también deberían funcionar otros trucos que afectan el concepto de Eclipse de la ruta de clase / estado de compilación.

Además, creo que este comportamiento se desencadenó en parte al intentar refactorizar una clase Scala cambiándola de nombre (lo que el Scala Eclipse IDE apesta), donde toda la limpieza después del cambio de archivo inicial es manual. No hubo errores de compilación, pero tampoco hubo advertencias de que esperaba, lo que significa que algo definitivamente se atascó en la información de estado de compilación de Eclipse.

n0741337
fuente