Przerzuciłem się na JUnit4.4 z JUnit3.8. Uruchamiam testy za pomocą programu Ant, wszystkie testy przebiegają pomyślnie, ale klasy narzędzi testowych kończą się niepowodzeniem z błędem „Brak metod do uruchomienia”. Wzorzec, którego używam, polega na umieszczeniu wszystkich klas o nazwie * Test * w folderze testowym.
Rozumiem, że biegacz nie może znaleźć żadnej metody z adnotacją @Test. Ale nie zawierają takiej adnotacji, ponieważ te klasy nie są testami. Zaskakujące jest to, że uruchamiając te testy w zaćmieniu, nie narzeka na te klasy.
W JUnit3.8 nie był to żaden problem, ponieważ te klasy narzędziowe nie rozszerzały TestCase, więc runner nie próbował ich wykonać.
Wiem, że mogę wykluczyć te konkretne klasy z docelowego junit w skrypcie Ant. Ale nie chcę zmieniać pliku kompilacji przy każdej nowej klasie narzędzi, którą dodam. Mogę też zmieniać nazwy zajęć (ale nadawanie klasom dobrych nazw zawsze było moim najsłabszym talentem :-))
Czy jest jakieś eleganckie rozwiązanie tego problemu?
Odpowiedzi:
Zakładając, że masz kontrolę nad wzorcem używanym do znajdowania klas testowych, sugerowałbym
*Test
raczej zmianę go tak, aby pasował*Test*
. W ten sposóbTestHelper
nie zostanie dopasowany, aleFooTest
będzie.źródło
Dodaj adnotacje do swoich klas użytkowych za pomocą @Ignore. Spowoduje to, że JUnit nie będzie próbował uruchamiać ich jako testów.
źródło
Mój konkretny przypadek ma następujący scenariusz. Nasze testy
wszystko się wydłuża
a JUnit próbował uruchomić BaseTixContainerTest. Biedny BaseTixContainerTest próbował tylko ustawić kontener, ustawić klienta, zamówić pizzę i zrelaksować się… stary.
Jak wspomniano wcześniej, możesz dodać do klasy adnotację
Ale to spowodowało, że JUnit zgłosił ten test jako pominięty (w przeciwieństwie do całkowicie zignorowanego).
To mnie irytowało.
Zrobiłem więc BaseTixContainerTest abstrakcyjnym, a teraz JUnit naprawdę to ignoruje.
źródło
@Ignore
Aby uniemożliwić JUnit utworzenie instancji testowej klasy bazowej, po prostu zrób to
(@Ignore zgłasza to jako ignorowane, które rezerwuję na tymczasowo ignorowane testy).
źródło
protected abstract class
.źródło
Zachowaj ostrożność, używając uzupełniania kodu IDE, aby dodać import dla
@Test
.Musi być,
import org.junit.Test
a nieimport org.testng.annotations.Test
na przykład. Jeśli zrobisz to drugie, pojawi się błąd „brak uruchomionych metod”.źródło
org.junit.jupiter.api.Test
zamiast tego! ale dzięki tobie jest już rozwiązanyMrówka ma teraz
skipNonTests
atrybut, który został zaprojektowany, aby robić dokładnie to, czego szukasz. Nie ma potrzeby zmieniania klas bazowych na abstrakcyjne lub dodawania do nich adnotacji.źródło
skipNonTests
atrybut jest dostępny tylko w mrówce 1.9+, a szkoda, bo wygląda niesamowicie użytecznie. Wyklucza również abstrakcyjne nadklasy testowe.A co z dodaniem pustej metody testowej do tych klas?
źródło
W Twojej klasie testowej, jeśli została napisana import org.junit.jupiter.api.Test; usuń go i napisz import org.junit.Test; W tym przypadku też mi się udało.
źródło
@BeforeAll
i@AfterAll
nie są one uruchamiane.@BeforeClass
i@AfterClass
, ale JUnit5 nie. ŹródłaMiałem również do czynienia z podobnym problemem („brak metod do uruchomienia…”) przy uruchamianiu najprostszego z prostego fragmentu kodu (przy użyciu @Test, @Before itp.) I nigdzie nie znalazłem rozwiązania. Używałem Junit4 i Eclipse SDK w wersji 4.1.2. Rozwiązałem mój problem, używając najnowszego zestawu Eclipse SDK 4.2.2. Mam nadzieję, że pomoże to ludziom, którzy borykają się z podobnym problemem.
źródło