Me cambié a JUnit4.4 desde JUnit3.8. Ejecuto mis pruebas usando ant, todas mis pruebas se ejecutan correctamente 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 * Prueba * 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 fue un problema en absoluto ya que estas clases de utilidad no extendieron TestCase por lo que el corredor no intentó ejecutarlas.
Sé que puedo excluir estas clases específicas en el destino junit en el script ant. Pero no quiero cambiar el archivo de compilación en cada nueva clase de utilidad que agregue. También puedo cambiar el nombre de las clases (pero dar buenos nombres a las clases siempre fue mi talento más débil :-))
¿Existe alguna solución elegante para este problema?
Respuestas:
Suponiendo que tiene el control del patrón utilizado para encontrar clases de prueba, le sugiero que lo cambie para que coincida en
*Test
lugar de*Test*
. De esa maneraTestHelper
no se igualará, peroFooTest
sí.fuente
Anote sus clases de utilidades con @Ignore. Esto hará que JUnit no intente ejecutarlos como pruebas.
fuente
Mi caso específico tiene el siguiente escenario. Nuestras pruebas
todos se extienden
y JUnit estaba intentando ejecutar BaseTixContainerTest. El pobre BaseTixContainerTest solo estaba tratando de configurar el contenedor, configurar el cliente, pedir pizza y relajarse ... hombre.
Como se mencionó anteriormente, puede anotar la clase con
Pero eso hizo que JUnit informara que la prueba se omitió (en lugar de ignorarla por completo).
Eso me irritó un poco.
Así que hice que BaseTixContainerTest fuera abstracto, y ahora JUnit realmente lo ignora.
fuente
@Ignore
Para evitar que JUnit cree una instancia de su clase base de prueba, simplemente hágalo
(@Ignore lo informa como ignorado, que reservo para pruebas ignoradas temporalmente ).
fuente
protected abstract class
.fuente
Tenga cuidado al usar la finalización de código de un IDE para agregar la importación para
@Test
.Tiene que ser
import org.junit.Test
y noimport org.testng.annotations.Test
, por ejemplo. Si hace lo último, obtendrá el error "no hay métodos ejecutables".fuente
org.junit.jupiter.api.Test
lugar! pero gracias a ti se resuelve ahoraAnt ahora viene con el
skipNonTests
atributo que fue diseñado para hacer exactamente lo que parece estar buscando. No es necesario cambiar sus clases base para abstraerlas o agregarles anotaciones.fuente
skipNonTests
atributo solo está disponible en ant 1.9+, lo cual es una pena, ya que parece increíblemente útil. También excluirá las superclases de prueba abstractas.¿Qué hay de agregar un método de prueba vacío a estas clases?
fuente
En su clase de prueba si escribió import org.junit.jupiter.api.Test; elimínelo y escriba import org.junit.Test; En este caso también me funcionó.
fuente
@BeforeAll
, y@AfterAll
no se ejecutan.@BeforeClass
y@AfterClass
, pero JUnit5 no. Referencia: junit.org/junit5/docs/current/user-guide/#migrating-from-junit4También me enfrentaba a un problema similar ("no hay métodos ejecutables ...") al ejecutar la pieza de código más simple (Usando @Test, @Before, etc.) y no encontré la solución en ninguna parte. Estaba usando Junit4 y Eclipse SDK versión 4.1.2. Resolví mi problema usando el último Eclipse SDK 4.2.2. Espero que esto ayude a las personas que luchan con un problema similar.
fuente