JUnit: cómo evitar "ningún método ejecutable" en las clases de prueba de utilidades

votos
94

He cambiado a JUnit4.4 desde JUnit3.8. Ejecuto mis pruebas usando Ant, todas mis pruebas se ejecutan con éxito, pero las clases de utilidad de prueba fallan con el error No hay métodos ejecutables. El patrón que estoy usando es incluir todas las clases con el nombre * Test * en la carpeta de prueba.

Entiendo que el corredor no puede encontrar ningún método anotado con el atributo @Test. Pero no contienen dicha anotación porque estas clases no son pruebas. Sorprendentemente, al ejecutar estas pruebas en eclipse, no se queja de estas clases.

En JUnit3.8 no era un problema en absoluto ya que estas clases de utilidad no extendían TestCase por lo que el corredor no intentó ejecutarlas.

Sé que puedo excluir estas clases específicas en el objetivo junit en el script ant. Pero no quiero cambiar el archivo de construcción en cada nueva clase de utilidad que agrego. También puedo cambiar el nombre de las clases (pero dar buenos nombres a las clases siempre fue mi talento más débil :-))

¿Hay alguna solución elegante para este problema?

Publicado el 23/03/2009 a las 08:26
fuente por usuario
En otros idiomas...                            


10 respuestas

votos
42

Asumiendo que tienes el control del patrón utilizado para encontrar clases de prueba, te sugiero cambiarlo para que coincida en *Testlugar de *Test*. De esa forma TestHelperno se igualará, pero lo FooTesthará.

Respondida el 23/03/2009 a las 08:45
fuente por usuario

votos
4

¿Qué hay de agregar un método de prueba vacío a estas clases?

public void avoidAnnoyingErrorMessageWhenRunningTestsInAnt() {
    assertTrue(true); // do nothing;
}
Respondida el 23/03/2009 a las 10:31
fuente por usuario

votos
130

Anota tus clases de utilidades con @Ignore. Esto hará que JUnit no intente ejecutarlos como pruebas.

Respondida el 11/06/2009 a las 19:16
fuente por usuario

votos
71

Mi caso específico tiene el siguiente escenario. nuestras pruebas

public class VenueResourceContainerTest extends BaseTixContainerTest

se extienden todas

BaseTixContainerTest

JUnit y estaba tratando de ejecutar BaseTixContainerTest. Pobres BaseTixContainerTest sólo estaba tratando de configurar el contenedor, la configuración del cliente, ordenar una pizza y relajarse ... hombre.

Como se mencionó anteriormente, puede anotar la clase con

@Ignore

Pero eso JUnit causado informar que prueba como saltado (en contraposición a ignorado por completo).

Tests run: 4, Failures: 0, Errors: 0, Skipped: 1

Ese tipo de me molestó.

Así que hice BaseTixContainerTest abstracto, y ahora JUnit verdaderamente lo ignora.

Tests run: 3, Failures: 0, Errors: 0, Skipped: 0
Respondida el 10/06/2010 a las 17:34
fuente por usuario

votos
32

Para evitar JUnit de crear instancias de la clase de base de prueba sólo lo hacen

public abstract class MyTestBaseClass { ... whatever... }

(@ignore reporta como ignoraba que reservo para temporalmente pruebas ignoradas.)

Respondida el 22/05/2012 a las 10:18
fuente por usuario

votos
0

También estaba frente a un problema similar ( "no hay métodos ejecutables ..") en el funcionamiento de la más simple de sencilla pieza de código (Usando @test, @Before etc.) y encontré la solución a ninguna parte. Yo estaba usando Junit4 y Eclipse SDK versión 4.1.2. Se resuelve mi problema utilizando el último SDK Eclipse 4.2.2. Espero que esto ayuda a las personas que están luchando con un tema algo similar.

Respondida el 23/04/2013 a las 21:01
fuente por usuario

votos
5

Ant ahora viene con el skipNonTestsatributo que fue diseñado para hacer exactamente lo que parece estar buscando. No hay necesidad de cambiar sus clases base para abstraer o añadir anotaciones a ellos.

Respondida el 31/03/2014 a las 22:44
fuente por usuario

votos
5

Tenga cuidado al usar código de finalización de un IDE para agregar la importación para @Test.

Tiene que ser import org.junit.Testy no import org.testng.annotations.Test, por ejemplo. Si hace esto último, obtendrá el error "no hay métodos ejecutables".

Respondida el 04/08/2015 a las 00:03
fuente por usuario

votos
13
  1. Si esta es tu clase de prueba base, por ejemplo AbstractTest y todas sus pruebas extiende esta a continuación definen esta clase como abstracta
  2. Si se trata de la clase Util luego retire mejor * Prueba de la clase cambiar el nombre es MyTestUtil o Utilidades etc.
Respondida el 02/02/2016 a las 19:45
fuente por usuario

votos
-1

En su clase de prueba si org.junit.jupiter.api.Test importación escribió; borrarlo y escribir org.junit.Test importación; En este caso me funcionó tan bien.

Respondida el 22/03/2018 a las 10:38
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more