2009-06-10 9 views
16

Mam kilka podstawowych klas testowych, które konfigurują wspólne konfiguracje dla sprężyny, rejestrowania, jndi itp. Za pomocą detektorów wykonania testu, które są następnie dziedziczone przez podklasy. Odbywa się to w ten sposób, że testy mogą po prostu uruchomić kod, nie martwiąc się o uzyskanie usług jndi i rejestrowania przed uruchomieniem kodu testowego.No Runnable methods Error From Base Test class

Użycie intellij i wywołanie "uruchom wszystkie testy" z bazy projektu, IDE próbuje uruchomić podstawową klasę testową jako test jednostkowy i daje mi błąd "Nie można uruchomić metod".

Wiem, że mogłem umieścić pustą, działającą metodę w klasie bazowej, ale miałem nadzieję, że ktoś ma lepszy pomysł.

klasy podstawowej jest:

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

} 

Błąd:

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

Właściwie w powyższym kodzie nie ma testów .... Masz to skomentował, więc komunikat o błędzie jest poprawny? –

+0

Tak, wyjaśniono przez komentarz wewnątrz skomentowanego kodu – gbegley

Odpowiedz

44

Bądź klasy nadrzędnej abstract lub zmiany nazwy, takie jak to, że nie kończy się Test lub TestCase.

+1

Dzięki! Moja klasa zaczynała od "Test", co spowodowało ten sam problem. – tttppp

+0

Dzięki! Miałem prawie ten sam problem, z wyjątkiem tego, że miałem klasę, która NIE była testem klasy, ale z nazwą zaczynającą się od Test, i która doprowadziła do tego samego komunikatu o błędzie. – bluttringer

+2

Wypisanie "testu" z nazwy klasy nie działa dla mnie. Ale dodanie "abstrakcji" zrobiło. –

1

Miałem ten sam problem. Testowałem bez metody testowej.

@Test 
public void setupTest() { 
} 

Powyższa metoda rozwiązała problem.

+0

Ten pusty test będzie działał x razy, ponieważ każda podklasa dziedziczy go (bez żadnego powodu). Przyjęta odpowiedź daje 2 lepsze opcje. –