2009-06-10 9 views
16

Ho alcune classi di test di base che configurano configurazioni comuni per spring, logging, jndi etc utilizzando listener di esecuzione test che vengono ereditati dalle sottoclassi. Questo è fatto in modo che i test possano semplicemente eseguire il codice senza doversi preoccupare di ottenere jndi e servizi di registrazione in atto prima di essere in grado di eseguire il codice di test.Nessun metodo Runnable Errore dalla classe Base di prova

Utilizzando intellij e richiamando "esegui tutti i test" dalla base del progetto, l'IDE tenta di eseguire la classe di test di base come test di unità e mi dà l'errore "Nessun metodo eseguibile".

So che potrei mettere un metodo runnable vuoto nella classe base, ma speravo che qualcuno avesse un'idea migliore.

La classe base è:

@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()); 

} 

L'errore:

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

In realtà non ci sono test nel codice sopra .... Avete commentato così il messaggio di errore è corretto? –

+0

Sì, spiegato dal commento all'interno del codice commentato – gbegley

risposta

44

rendere la classe genitore abstract o rinominarlo come non finisce in Test o TestCase.

+1

Grazie! Ho avuto la mia lezione a partire da "Test" e questo ha causato lo stesso problema. – tttppp

+0

Grazie! Ho avuto quasi lo stesso problema tranne che ho avuto una classe che NON era un test di classe ma con un nome che inizia con Test e che ha portato allo stesso messaggio di errore. – bluttringer

+2

L'esecuzione di "Test" fuori dal nome della classe non ha funzionato per me. Ma aggiungere "astratto" ha fatto. –

1

Ho avuto lo stesso problema. Stavo testando senza un metodo di prova.

@Test 
public void setupTest() { 
} 

Sopra metodo risolto il problema.

+0

Questo test vuoto eseguirà x numero di volte in cui una sottoclasse lo erediterà (senza motivo). La risposta accettata offre 2 opzioni migliori. –

Problemi correlati