2009-06-10 7 views
16

Tengo unas pocas clases de prueba base que configuran configuraciones comunes para la primavera, el registro, jndi, etc. utilizando oyentes de ejecución de prueba que luego son heredados por subclases. Esto se hace para que las pruebas solo ejecuten código sin tener que preocuparse por obtener los servicios jndi y de inicio de sesión antes de poder ejecutar el código de prueba.No hay métodos ejecutables Error de la clase de prueba base

Usando intelliy e invocando "ejecutar todas las pruebas" desde la base del proyecto, el IDE intenta ejecutar la clase de prueba base como una prueba unitaria y me da el error "No hay métodos ejecutables".

Sé que podría poner un método ejecutable vacío en la clase base, pero esperaba que alguien tuviera una mejor idea.

la clase base es:

@RunWith(SpringJUnit4ClassRunner.class) 
    @ContextConfiguration(locations = { 
      "classpath:spring-jndi.xml" 
    }) 
    @TestExecutionListeners({ 
      Log4JSetupListener.class, 
      JndiSetupListener.class, 
      DependencyInjectionTestExecutionListener.class, 
      DirtiesContextTestExecutionListener.class, 
      TransactionalTestExecutionListener.class 
    }) 
    public class SpringAppTestCase extends Assert implements ApplicationContextAware { 

     protected JndiTemplate jndiTemplate = new JndiTemplate(); 

     @Autowired 
     protected JdbcTemplate jdbcTemplate; 

     protected ApplicationContext applicationContext; 

     public void setApplicationContext(ApplicationContext ac) { 
      this.applicationContext = ac; 
     } 

    // 
    // @Test 
    // public void doit(){ 
    //  // this would prevent blow up but 
    // all subclass tests would run an extra method 
    // } 

     protected Logger log = Logger.getLogger(getClass().getName()); 

} 

El error:

java.lang.Exception: No runnable methods 
    at org.junit.internal.runners.MethodValidator.validateInstanceMethods(MethodValidator.java:32) 
    at org.junit.internal.runners.MethodValidator.validateMethodsForDefaultRunner(MethodValidator.java:43) 
    at org.junit.internal.runners.JUnit4ClassRunner.validate(JUnit4ClassRunner.java:36) 
    at org.junit.internal.runners.JUnit4ClassRunner.<init>(JUnit4ClassRunner.java:27) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.<init>(SpringJUnit4ClassRunner.java:76) 
+0

En realidad, no hay pruebas en el código anterior .... ¿Lo ha comentado para que el mensaje de error sea correcto? –

+0

Sí, explicado por el comentario dentro del código comentado – gbegley

Respuesta

44

hacer que la clase padre abstract o cambie su nombre, como no termina en Test o TestCase.

+1

¡Gracias! Tuve mi clase comenzando con "Prueba" y eso causó el mismo problema. – tttppp

+0

¡Gracias también! Tuve casi el mismo problema, excepto que tenía una clase que NO era una prueba de clase, pero con un nombre que comenzaba por Prueba, y que dio lugar al mismo mensaje de error. – bluttringer

+2

Tomar "Prueba" fuera del nombre de la clase no funcionó para mí. Pero agregar "abstracto" sí lo hizo. –

1

Tuve el mismo problema. Estaba probando sin un método de prueba.

@Test 
public void setupTest() { 
} 

El método anterior ha solucionado el problema.

+0

Esta prueba vacía se ejecutará x veces que cualquier subclase lo herede (sin ninguna razón). La respuesta aceptada da 2 mejores opciones. –

Cuestiones relacionadas