Nie znaleziono testów z narzędziem do uruchamiania testów „JUnit 4”

105

Mój test Java działał dobrze z Eclipse. Ale teraz, kiedy ponownie uruchamiam test z menu uruchamiania, otrzymuję następujący komunikat:

No tests found with test runner 'JUnit 4'

W .classpathpliku mam wszystkie jarpliki, a na koniec mam:

<classpathentry exported="true" kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/4"/>
    <classpathentry kind="output" path="bin"/>
</classpath>

Jak mogę rozwiązać ten błąd i ponownie uruchomić testy?

user281070
źródło
1
Czy możesz opublikować treść swojego testu (lub przynajmniej deklarację klasy). Poza tym napisałeś „na końcu masz:”.
phtrivier
sprawdź to .. to powinno pomóc stackoverflow.com/questions/22469480/junit-no-tests-found
prasad vsv
Dla JUnit 5 zobacz tutaj
Anand Rockzz

Odpowiedzi:

156

to właśnie mi się przydarzyło. Odbudowanie lub ponowne uruchomienie Eclipse nie pomogło.

Rozwiązałem to, zmieniając nazwę jednej z metod testowych na „test ...” (styl JUnit3), a następnie wszystkie testy zostały znalezione. Zmieniłem jego nazwę z powrotem na to, co było wcześniej, i nadal działa.

Niemiecki
źródło
7
mam metodę, podobnie jak testQuotesinne metody, które nie zaczynają się od testu, ale nadal otrzymuję błąd Nie znaleziono testów
Rachel
1
Miałem ten sam problem z rozszerzającą się klasą junit.framework.TestCase, a moje metody musiały zaczynać się od „testu”. Zamiast rozszerzać TestCase, dodałem import: import static org.junit.Assert.*;i mogę nazwać moje metody, jak chcę. Dziwne ...
MrDrews
6
Poważnie, nawet jeśli test jest oznaczony adnotacją @Test, nazwa funkcji testowej nadal musi być poprzedzona przedrostkiem „test”?
Brian Shotola
4
Możesz również dodać 2015 i Eclipse Luna do tej listy. Właściwie wiele moich metod @Test nadal zaczyna się od przedrostka „test”. I usuwane że prefiks na jednym teście, zapisany, a następnie wszystkie testy zostały znalezione. Następnie dodałem go z powrotem i nadal znajdowałem wszystkie testy. Wydaje się, że chodzi bardziej o zmianę metody (pliku?), Aby Eclipse ponownie odkrył wszystko.
Brian White
2
Android Studio 2.1.1, maj 2016, nadal działa. Zastanawiam się, czy ta odpowiedź będzie działać do końca wszechświata.
Blueriver
42

Kiedy otrzymujemy te błędy, wydaje się, że Eclipse jest po prostu zdezorientowany. Zrestartuj Eclipse, odśwież projekt, wyczyść go, pozwól Eclipse odbudować go i spróbuj ponownie. W większości przypadków działa to jak urok.

JamesG
źródło
1
Tak też dla mnie pracował i zgadzam się z dlamblinem. Dobre przypomnienie, aby zawsze spróbować ponownie uruchomić komputer w przypadku dziwnego problemu, którego nie można rozwiązać w ciągu pierwszych 5 minut popychania.
Thien
3
Miałem ten problem i zamknąłem plik źródłowy, w którym zdefiniowałem moją klasę testową, dwukrotnie kliknąłem ten plik w nawigatorze i zadziałało. Więc zamknięcie i ponowne otwarcie pliku działało, bez ponownego uruchamiania Eclipse.
metamatt
11
to naprawdę sprawia, że ​​chcę poszukać nowego IDE. to działało dla mnie.
Seth M.
1
zamknięcie i ponowne otwarcie projektu rozwiązało problem!
Martin Charlesworth
34

W menu kontekstowym katalogu „test” wybierz „Ścieżka kompilacji” -> „Użyj jako folderu źródłowego”. Eclipse powinno zobaczyć Twoje pliki unitTests.java jako pliki źródłowe. Ostrzeżenie „Nie znaleziono testów JUnit” występuje, ponieważ w katalogu „build” nie ma plików unitTests.class

Dima
źródło
To rozwiązanie, które mi odpowiada. Ponowne uruchomienie nie działa.
Andree
Właśnie o to mi chodziło, ponieważ folder „test” nie powinien znajdować się w folderze „src”. Zrobiłem to, a następnie otworzyłem / zamknąłem projekt zgodnie z sugestiami innych odpowiedzi, a teraz kompiluje się i uruchamia jako test JUnit. Dzięki!
quux00
Zrobiłem to samo, wybierając projekt -> ścieżka kompilacji Java -> Źródło -> dodaj folder testowy. Wielkie dzięki!
Peter Clause
Jeśli src / test / groovy znajduje się już na ścieżce kompilacji jako folder źródłowy, usuń go, a następnie dodaj ponownie. Łatwiejsze niż usuwanie i zastępowanie @Test w każdym pliku testowym ...
geneSummons
32

Sprawdź, czy Twoja klasa testowa rozszerza „TestCase”. jeśli tak, usuń tę klauzulę. Twoja klasa nie musi rozszerzać się z klasy „TestCase”. To większość przypadków, które spotkałem.

public class MyTestCase extends TestCase{
  @Test
  public void checkSomething() {
    //...
  }
}
//Result> AssertionFailedError: No test Found in MyTestCase

Po TestCase powinno wystarczyć.

public class MyTestCase {
  @Test
  public void checkSomething() {
    //...
  }
}
//Works fine
nephilim
źródło
To rzeczywiście jest prawidłowa odpowiedź. Przetestowałem to z IntelliJ i JUnit 4.1 i działa!
Dio Phung
Problem, z którym się zmagam, polega na tym, że podczas zaćmienia moje testy JUnit działają dobrze, ale kiedy eksportuję je do JAR, pojawia się powyższy błąd. Jakieś pomysły?
TryToLearn
Czy w dzisiejszych czasach jest odwrotnie? Dodanie „extends TestCase” rozwiązało problem.
Heinzlmaen
Pracował dla mnie !!! Dzięki
JRichardsz
27

Miałem do czynienia z tym samym problemem i zdebugowałem go do złych przykładów w Internecie i wewnętrznych elementach junit. Zasadniczo nie rób swojej klasy rozszerzeniem TestCase, jak pokazują niektóre przykłady dla Junit 4.x. Użyj trochę konwencji nazewnictwa Test lub jeśli chcesz mieć adnotację, możesz użyć @RunWith (JUnit4.class).

Jeśli potrzebujesz dostępu do metod assert, rozszerz Assert lub użyj importu statycznego.

Jeśli twoja klasa rozszerza TestCase, to nawet jeśli używasz Junit 4 Runner, zostanie uruchomiona jako 3. Dzieje się tak, ponieważ w kodzie inicjalizacyjnym jest wykrywanie:

Zobacz JUnit3Builder i linie:

boolean isPre4Test(Class<?> testClass) {
    return junit.framework.TestCase.class.isAssignableFrom(testClass);
}

Zwraca to wartość true, a test zgodności z junit4 nie zostanie przeprowadzony.

toomasr
źródło
2
To rozwiązało problem. Jeśli spojrzysz najpierw na starsze przykłady użycia Junit, to one sprowadzą cię na manowce.
Alex Kilpatrick,
„Jeśli Twoja klasa rozszerza TestCase, to nawet jeśli używasz Junit 4 Runner, będzie działać jako 3” - to nieprawda (przynajmniej dla Groovy i Intellij IDEA). Używam JUnit 4.12 i @RunWith(JUnit4)dodałem adnotacje do klasy i rozszerzyłem ją z "GroovyTestCase". Bez @RunWith(JUnit4)mam te same problemy.
Veaceslav Gaidarji
Zachowanie jest nadal takie samo jak w 2017 r. (JUnit 4.12).
sharmaap
5

Spróbuj dodać

@Test powyżej metody dla takiego testu

@Test
public void testParse()
{

}
Mike Choi
źródło
5

Jeszcze inne możliwe rozwiązanie, które wrzucę na ring: nie mogłem uruchomić klasy testowej ani z okna edytora, ani z Eksploratora pakietów, ale klikając prawym przyciskiem myszy nazwę klasy w widoku konspektu i wybierając opcję Uruchom jako JUnit Test zadziałał ... Idź do figury!

Matthew Wise
źródło
to samo, z widoku konspektu działa, wszystko inne nie - wypróbowałem każde rozwiązanie zamieszczone w 3 wątkach przepełnienia stosu, nic nie działa
MPSL
U mnie to też działa, ale jest bezużyteczne do testowania pokrycia w projekcie.
bogaty
4

Brak zestawów testowych w JUnit4. Zamiast tego użyj adnotacji lub użyj starych konwencji nazw JUnit3.

Przykład:

@RunWith(Suite.class)
@SuiteClasses({YourClassWithTests.class})
Roman C
źródło
4

Mnie też się to przydarzyło. Próbowałem zrestartować Eclipse, a także poprzedziłem moje metody testowe testami. Żadne nie działało.

Następujący krok zadziałał: Zmień wszystkie metody testowe obecne w @BeforeClass i @AfterClass na metody statyczne.

tzn. jeśli masz swoją metodę testową w poniższym formacie:

@BeforeClass
public void testBeforeClass(){
}

następnie zmień go na:

@BeforeClass
public static void testBeforeClass(){
}

To zadziałało dla mnie.

revindran
źródło
4

Znalazłem odpowiedź:

Otrzymałem ten błąd, gdy wykonałem test samodzielnie z zaćmienia (kliknij prawym przyciskiem myszy metodę i wybierz uruchomienie jako test junit),

Kiedy wykonałem całą klasę jako junit test, test został wykonany poprawnie z parametrami.

Eyal Zamir
źródło
3

Kiedy napotykam ten problem, po prostu edytuję plik i zapisuję go ... działa jak urok

Mahesh
źródło
1
Cześć kolego i witaj w Stackoverflow! :) Czy mógłbyś rozwinąć swoją odpowiedź?
Littm
@Mahesh Masz na myśli odświeżenie pliku (wybierz go i naciśnij F5)
Cassian
Mam ten sam problem ze scala, tzn. Moje testy są napisane dla JUnit4, ale są w scali. Rozwiązaniem, jak sugeruje @Mahesh, jest nadanie kompilatorowi kopa. Nie ma znaczenia, co robisz podczas edycji pliku, po prostu musisz go edytować. Wpisuję coś, co powoduje błąd składni, zapisuję plik, a następnie cofam i zapisuję ponownie. Nagle przebiegają moje testy. Zdarza mi się to często, tj. Przynajmniej codziennie, zwykle kilka razy dziennie.
Erick G. Hagstrom
3

Mój problem polegał na tym, że deklaracja import org.junit.Test;zniknęła (lub nie została dodana?). Po dodaniu musiałem usunąć kolejną importdeklarację (Eclipse podpowie Ci, która z nich) i wszystko znów zaczęło działać.

Sergii
źródło
3

Bardzo późno, ale tym, co rozwiązało problem, było to, że nazwy moich metod testowych zaczynały się od wielkich liter: „public void Test”. Tworzenie małych liter zadziałało.

Josh T
źródło
to działa dla mnie ... ale jest to dziwnie mylące rozwiązanie
Anchit Mittal
2

Wypróbowałem rozwiązanie firmy Germán. Zadziałało dla wszystkich metod z mojej klasy, ale mam dużo zajęć w moim projekcie.

Spróbowałem więc usunąć ze ścieżki kompilacji, a następnie dodać ją ponownie. Działało idealnie.

Mam nadzieję, że to pomoże.

Footix29
źródło
2

Sześć lat później ... nadal występują problemy z Eclipse i czasami nie można znaleźć JUnits.

W moim Eclipse Mars 2 odkryłem, że nie rozpozna on klas testowych pobranych z gita, jeśli @Testw pliku jest więcej niż 9 lub 10 adnotacji. Muszę skomentować wszelkie dodatkowe testy, uruchomić klasę testów, a następnie odkomentować je i ponownie uruchomić klasę. Domyśl...

SimonB
źródło
Ta odpowiedź jest pomocna, nie miałem dokładnie takiej samej sytuacji, ale nazwy metod testowych były dość podobne i zaćmienie miało problem ze znalezieniem ich. Tak jak testCase01, testCare02 ... Musiałem skomentować inne metody "testCasexx", aby uruchomić testCase01, bo inaczej zgłasza wyjątek. Wydaje się, że upublicznienie wszystkich metod testowych rozwiązało ten problem!
01000001
1

Być może konfiguracja uruchamiania JUnit była przeznaczona dla pojedynczej klasy testowej, a Ty w jakiś sposób zmieniłeś tę konfigurację na „uruchamianie wszystkich testów w folderze źródłowym, pakiecie lub projekcie”

Może to jednak spowodować wyświetlenie komunikatu o błędzie „Nie znaleziono testów z programem uruchamiającym testy„ JUnit 4 ””.

Albo dokonałeś modyfikacji w klasie testowej, usuwając @Testadnotację.
Zobacz tę stronę wiki .

VonC
źródło
@Test jest tutaj, wiadomość brzmi: nie można znaleźć głównej klasy toto.lolo.testrunner (która jest określona w konfiguracji uruchamiania)
user281070
@lamisse: a więc jakiś problem ze ścieżką klas? lub kwestia składni: powinno być, toto.lolo.Testrunnera nie toto.lolo.testrunner(„T”)
VonC,
@lamisse: czy „toto.lolo.Testrunner” to rzeczywista nazwa Twojej klasy TestRunner? Czy to jest coś, co napisałeś? Czy projekt / jar zawiera go w ścieżce klas konfiguracji uruchamiania?
phtrivier
1

Napotkałem ten sam problem podczas uruchamiania testu JUnit. Rozwiązałem to, umieszczając adnotację @Test tuż nad główną funkcją testową.

Rajith
źródło
1

To, co naprawiło mój przypadek, było podobne do odpowiedzi @ JamesG: zrestartowałem Eclipse, odbudowałem projekt i odświeżyłem go; ALE zanim to zrobiłem, najpierw zamknąłem projekt (kliknij projekt prawym przyciskiem myszy w eksploratorze pakietów -> Zamknij projekt), a następnie ponownie go otworzyłem. Wtedy zadziałało.

Rozwiązanie obejścia, które znalazłem przed znalezieniem tego ostatecznego rozwiązania, które właśnie opisałem: Skopiuj klasę testową i uruchom klasę testową jako JUnit.

cellepo
źródło
1

Sprawdź, czy folder, w którym znajdują się testy, jest folderem źródłowym. Jeśli nie - kliknij prawym przyciskiem myszy i użyj jako folderu źródłowego.

Todor Kolev
źródło
1

Zamknij i otwórz projekt działał dla mnie.

user3022123
źródło
1

Jest jeszcze jedna szansa, że ​​mogłeś zmienić Junit Test z niższej wersji (np. Junit 3) na Junit 4. Czy tak postępuj zgodnie z poniższymi krokami: -

1. Right Click on class
2. Select Run as >> "Run Configurations"
3. Check your "Test Runner" option in new window
4. If it not same as maven change it for example change it as Junit 4.
Kundan Atre
źródło
1

Dodaj @Testdo testu.
Najedź myszą na adnotację.
Wybierz opcję „Dodaj bibliotekę junit 4 do ścieżki klas”

Mikrofon
źródło
0

Czy Twój projektant Eclipse opiera się na projektach? Jeśli tak, może być konieczna aktualizacja wersji m2eclipse.

Krótka uwaga: mam projekt w Eclipse, który jest oparty na mavenie i został wygenerowany początkowo przy użyciu kreatora "nowego projektu maven" w Eclipse. Używam JUnit 4.5 do testów jednostkowych i całkiem szczęśliwie mogłem uruchomić testy z wiersza poleceń za pomocą maven, a poszczególne testy z Eclipse za pomocą run as JUnit test .... Jednak kiedy próbowałem uruchomić wszystkie testy w projekcie, wywołując polecenie run as JUnit test ... w węźle głównym projektu, Eclipse skarżył się, że „ nie znaleziono testów w module runner test junit 4 ”. Rozwiązane przez aktualizację m2eclipse do najnowszej stabilnej wersji rozwojowej z witryny aktualizacji m2eclipse (w szczególności zaktualizowałem z wersji 0.9.8.200905041414 do wersji 0.9.9.200907201116 w Eclipse Galileo).

Stąd: http://nuin.blogspot.com/2009/07/m2eclipse-and-junit4-no-tests-found.html

Rosół
źródło
Nie rozumiem, nie sądzę, że jest to związane z wersją eclispe, mój test zadziałał wczoraj, a teraz nie z powodu wyskakującego okienka uruchomienia Junita czy jest sposób na przywrócenie mojej pierwszej konfiguracji?
user281070,
Lamisse, ja też jestem zdezorientowany. Proponuję zaktualizować swoje pytanie, aby wyjaśnić, kiedy działa test jednostkowy, a kiedy nie.
Rok
0

Mnie też się to przydarzyło. Okazało się, że w Eclipse nie utworzyłem nowego pliku klasy Java i dlatego nie był kompilowany. Spróbuj skopiować kod do pliku klasy Java, jeśli jeszcze go tam nie ma, a następnie skompiluj.

Ania
źródło
0

Dowiedziałem się, że Eclipse wydaje się wykonywać testy w stylu JUnit 3 tylko wtedy, gdy twoja klasa test rozciąga się od TestCase. Jeśli usuniesz spadek, adnotacje zadziałały.

Pamiętaj, że musisz zaimportować statycznie wszystkie wymagane assert*metody, takie jak import static org.junit.Assert.*.

Martin C.
źródło
0

Musiałem wykonać czyszczenie mvn w wierszu poleceń, a następnie projekt-> wyczyść w zaćmieniu. Wcześniej zmieniłem nazwę klasy, a potem z powrotem, ale wątpię, żeby to pomogło.

joe otherside
źródło
0

Używam także Eclipse z Maven (m2e 1.4). Testy działały z Mavenem, ale nie z Eclipse ... nawet po kilku zastosowaniach Maven>Update project.

Moim rozwiązaniem było dodanie kilku linii w .classpath generowanym przez m2e. Linie teraz się trzymają.

<classpathentry kind="src" output="target/test-classes" path="src/test/java">
  <attributes>
    <attribute name="optional" value="true"/>
    <attribute name="maven.pomderived" value="true"/>
  </attributes>
</classpathentry>
pascal
źródło
0

Mam taki problem od czasu do czasu. To, co dla mnie najbardziej rozwiązuje ten problem, to uruchomienie testu JUnit w konfiguracjach Run ... upewniając się, że JUnit 4 jest ustawiony jako test runner.

Zwykle widzę ten problem podczas próby uruchomienia testu jako ... Junit z menu kontekstowego w Eksploratorze pakietów. Jeśli klikniesz prawym przyciskiem myszy kod testu, który próbujesz uruchomić, i zamiast wybierać Uruchom jako ... Junit Test, wybierz opcję Uruchom konfiguracje ... upewnij się, że projekt, klasa testowa i moduł uruchamiający testy są ustawione poprawnie, kliknij zastosuj, a następnie uruchom pracuje dla mnie cały czas.

theINtoy
źródło
0

Zacząłem pracować z Selenium i Eclipse w mojej pracy i robiłem swój pierwszy automatyczny test i usunąłem z kodu @Before, @Test i @After notatki i miałem ten problem „Nie znaleziono testów z test runner junit4” .

Moim rozwiązaniem było po prostu ponowne dodanie notatek @Before, @Test i @After i dzięki temu mój skrypt zadziałał. Ważne jest, aby nie usuwać tego z kodu.

To jest prosty test wykorzystujący Google do wyszukiwania czegoś:

import java.util.regex.Pattern;
import java.util.concurrent.TimeUnit;

import org.junit.*;

import static org.junit.Assert.*;
import static org.hamcrest.CoreMatchers.*;

import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.Select;

public class TestingClass {

    private WebDriver driver;
    //Creates an instance of the FirefoxDriver
    **@Before**
    public void SetUp() throws Exception {
        driver = new FirefoxDriver();
    }

    **@Test**   
    //Search using keyword through Google Search
    public void TestTestClass2 () throws Exception {
        driver.get("http://www.google.com.mx/");
        driver.findElement(By.name("q")).sendKeys("selenium");
        Thread.sleep(10000);
        driver.findElement(By.name("btnG")).click();
        Thread.sleep(10000);
    }

    //Kill all the WebDriver instances
    **@After**
    public void TearDown() throws Exception {
        driver.quit();
    }

}
JuanTorre
źródło
0

Używając ScalaIDE (3.0.4-2.11-20140723-2253-Typesafe) miałem podobny problem z Right Click Scala Test Class-> Run As -> Scala Junit Testmenu kontekstowym.

Próbowałem edytować klasę (ale nie z powodu błędu kompilacji), wyczyścić, zamknąć projekt, zamknąć Eclipse. Żadne z nich nie działało, aby przywrócić menu kontekstowe dla zajęć, które wcześniej działały dobrze. Klasy testowe nie używają @Testadnotacji i zamiast tego używają @RunWith(classOf[JUnitRunner])adnotacji na początku klasy przy użyciu kodu ScalaTest.

Kiedy próbowałem bezpośrednio wybrać Scala Junit Testz edytora uruchamiania konfiguracji Run Configuration, otrzymałem okno dialogowe z pytania. Odpowiedź Footix29 była dla mnie kluczowa.

Zauważyłem, że mimo że wyczyściłem projekt kilka razy, moje klasy w katalogu / bin nie były odbudowywane od jakiegoś czasu.

Oto jak odzyskałem menu kontekstowe i mogłem ponownie uruchomić Scala Junit Tests:

  • manuallywyczyścił klasy, usuwając plik /bin/<package dir>*via Explorer
  • Project -> Cleaned projekt wraz z pełną przebudową

Podejrzewam, że edycja klas w ogóle jest w stanie wyczyścić zapisany stan Eclipse i ponownie go uruchomić. W moim przypadku wszystkie poprzednie zajęcia, które wypróbowałem, zawiodły, więc manualczysty krok był tylko młotkiem, którego potrzebowałem. Jednak inne sztuczki, które wpływają na koncepcję Eclipse dotyczące ścieżki klasy / stanu kompilacji, również powinny działać.

Co więcej, myślę, że to zachowanie zostało częściowo wywołane próbą refaktoryzacji klasy Scala poprzez zmianę jej nazwy (do której jest do bani środowisko Scala Eclipse IDE), gdzie całe czyszczenie po początkowej zmianie pliku odbywa się ręcznie. Nie było błędów kompilacji, ale nie było też ostrzeżeń, których się spodziewałem, co oznacza, że ​​coś utknęło w informacjach o stanie kompilacji Eclipse.

n0741337
źródło