java ant junit testing

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



ant testing (10)

  1. Si esta es su clase de prueba base, por ejemplo, AbstractTest y todas sus pruebas se extienden, defina esta clase como abstracta.
  2. Si es clase Util, entonces mejor eliminar * Prueba de la clase cambiar el nombre es MyTestUtil o Utils, etc.

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?


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

public void avoidAnnoyingErrorMessageWhenRunningTestsInAnt() { assertTrue(true); // do nothing; }


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


Ant ahora viene con el atributo skipNonTests que fue diseñado para hacer exactamente lo que pareces estar buscando. No es necesario cambiar sus clases base para abstraerlas o agregarle anotaciones.


En su clase de prueba, si escribió import org.junit.jupiter.api.Test; elimínelo y escriba import org.junit.Test; En este caso, me funcionó también.


Mi caso específico tiene la siguiente situación. Nuestras pruebas

public class VenueResourceContainerTest extends BaseTixContainerTest

todos extienden

BaseTixContainerTest

y JUnit estaba intentando ejecutar BaseTixContainerTest. Pobre BaseTixContainerTest solo intentaba configurar el contenedor, configurar el cliente, pedir pizza y relajarse ... hombre.

Como se mencionó anteriormente, puede anotar la clase con

@Ignore

Pero eso hizo que JUnit informara esa prueba como salteada (en lugar de ignorarla por completo).

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

Eso me irritó.

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

Tests run: 3, Failures: 0, Errors: 0, Skipped: 0


Para evitar que JUnit ejemplifique su clase base de prueba, solo hágalo

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

(@Inore lo informa como ignorado, que reservo para las pruebas temporalmente ignoradas).


También me enfrentaba a un problema similar ("no se podían ejecutar métodos ...") al ejecutar la pieza de código simple 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. Resolvió mi problema utilizando el último Eclipse SDK 4.2.2. Espero que esto ayude a las personas que están luchando con un problema similar.


Tenga cuidado al usar el código IDE completado para agregar la importación para @Test .

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


Asumiendo que tienes el control del patrón utilizado para encontrar clases de prueba, te sugiero que lo cambies para que coincida con *Test lugar de *Test* . De esa forma, TestHelper no se TestHelper , pero FooTest hará.