No tests found with test runner 'JUnit 4'

JavaEclipseJunitJunit4

Java Problem Overview


My Java test worked well from Eclipse. But now, when I relaunch test from the run menu, I get the following message:

No tests found with test runner 'JUnit 4'

In the .classpath file I have all jar files, and at the end have:

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

How can I resolve this error and get tests running again?

Java Solutions


Solution 1 - Java

this just happened to me. Rebuilding or restarting Eclipse didn't help.

I solved it by renaming one of the test methods to start with "test..." (JUnit3 style) and then all tests are found. I renamed it back to what it was previously, and it still works.

Solution 2 - Java

When we get these errors it seems like Eclipse is just confused. Restart Eclipse, refresh the project, clean it, let Eclipse rebuild it, and try again. Most times that works like a charm.

Solution 3 - Java

In context menu of your 'test' directory choose 'Build path' -> 'Use as a source folder'. Eclipse should see your unitTests.java files as a source files. Warning 'No JUnit tests found' occures because there is no unitTests.class files in your 'build' directory

Solution 4 - Java

Check if your test class extends "TestCase". if so, remove that clause. Your class does not need to extend from "TestCase" class. It's most of the cases I've met.

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

Following TestCase should be fine.

public class MyTestCase {
  @Test
  public void checkSomething() {
    //...
  }
}
//Works fine

Solution 5 - Java

I was facing the same problem and I debugged it to bad examples on the web and internals of junit. Basically don't make your class extend TestCase as some examples show for Junit 4.x. Use some naming convention Test or if you want to have an annotation you can use @RunWith(JUnit4.class).

If you need access to assert methods extend Assert or use static imports.

If your class extends TestCase then even if you use Junit 4 Runner it will be run as 3. This is because in the initialization code there is detection:

See JUnit3Builder and the lines:

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

This returns true and the test for junit4 compatibility won't be tried.

Solution 6 - Java

Try Adding

@Test above the method for the test like this

@Test
public void testParse()
{

}

Solution 7 - Java

Yet another possible solution I'll throw into the ring: I wasn't able to run the test class either from the editor window, nor the Package Explorer, but right-clicking on the class name in the Outline view and selecting Run As JUnit Test did work... Go figure!

Solution 8 - Java

No testsuits in JUnit4. Use annotations instead or use old JUnit3 name conventions.

Example:

@RunWith(Suite.class)
@SuiteClasses({YourClassWithTests.class})

Solution 9 - Java

This happened to me as well. I tried restarting Eclipse and also prefixed my test-methods with tests. Neither worked.

The following step worked: Change all your test methods present in @BeforeClass and @AfterClass to static methods.

i.e. if you have your test method in the below format:

@BeforeClass
public void testBeforeClass(){
}

then change it to:

@BeforeClass
public static void testBeforeClass(){
}

This worked for me.

Solution 10 - Java

I have found out the answer:

I got this error when I executed the test standalone from eclipse (right click on the method and choose to run as junit test),

When I executed the complete class as junit test the test executed correctly with the parameters.

Solution 11 - Java

When I face this problem I just edit the file and save it... works like charm

Solution 12 - Java

My problem was that declaration import org.junit.Test; has disappeared (or wasn't added?). After adding it, I had to remove another import declaration (Eclipse'll hint you which one) and everything began to work again.

Solution 13 - Java

Very late but what solved the problem for me was that my test method names all started with captial letters: "public void Test". Making the t lower case worked.

Solution 14 - Java

I tried the solution from Germán. It worked for all the method from my class but i have a lot of classes in my project.

So I tried removing from build path and then re-adding it. It worked perfectly.

Hope it helps.

Solution 15 - Java

Six years later ... and there are still problems with Eclipse and occasionally not finding JUnits.

In my Eclipse Mars 2 I discovered that it won't recognise test classes pulled in from git if there are more than 9 or 10 @Test annotations in the file. I need to comment out any extra tests, run the test class, then uncomment them and re-run the class. Go figure...

Solution 16 - Java

May be your JUnit launch configuration was for a individual test class, and you somehow changed that config to "run all tests in a source folder, package or project"

But that could trigger the "No tests found with test runner 'JUnit 4'" error message.

Or you did a modification in your test class, removing the @Test annotation.
See this wiki page.

Solution 17 - Java

What fixed my case was similar to @JamesG's answer: I restarted Eclipse, rebuilt the project, and refreshed it; BUT before I did any of that, I 1st closed the project (right-click project in package explorer -> Close Project) and then re-opened it. Then it worked.

A workaround solution I found before finding that ultimate solution I just described: Copy the test class, and run the test class as JUnit.

Solution 18 - Java

Check if the folder your tests are in is a source folder. If not - right click and use as source folder.

Solution 19 - Java

Close and open the project worked for me.

Solution 20 - Java

There is another chance, you might have changed Junit Test from lower version(e.g. Junit 3) to Junit 4 . Is so follow below steps:-

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.

Solution 21 - Java

Right Click the Project -> Build Dependencies -> remove the ones which have been excluded from the build path -> Click OK

Right Click the Project -> Maven -> Update Project.

You should be good to go..

Solution 22 - Java

You can fix this issue by do as following:

  • Right click on the folder named 'Test' > Build Path > Use as Source Folder
  • Or you can set classpath same as: <classpathentry kind="src" path="src/test/java"/> . You replace "src/test/java" by your test package

This issue happened because of junit cannot recognize your source code :D

Solution 23 - Java

I've had issues with this recently, which seem to be fixed in the latest Eclipse.

eclipse-java 4.11.0,2019-03:R -> 4.12.0,2019-06:R

Solution 24 - Java

Add @Test on top of your test.
Mouse hover to the annotation.
Chose 'add junit 4 library to classpath'

Solution 25 - Java

Is your Eclipse project maven based? If so, you may need to update the m2eclipse version.

> Just a quick note: I have a project in > Eclipse which is maven-based, and > generated initially using the "new > maven project" wizard in Eclipse. I'm > using JUnit 4.5 for the unit tests, > and could quite happily run the tests > from the command line using maven, and > individual tests from Eclipse using > run as JUnit test.... However, when I > tried to run all of the tests in the > project by invoking run as JUnit > test... on the project root node, > Eclipse complained "no tests found > with test runner junit 4". Solved by > upgrading m2eclipse to the latest > stable development build from the > m2eclipse update site (specifically, I > upgraded from version > 0.9.8.200905041414 to version 0.9.9.200907201116 in Eclipse Galileo).

From here: http://nuin.blogspot.com/2009/07/m2eclipse-and-junit4-no-tests-found.html

Solution 26 - Java

This happened to me too. I found that in Eclipse I didn't make a new Java Class file and so that's why it wasn't compiling. Try copying your code into a java class file if it's not already there and then compile.

Solution 27 - Java

I found out that Eclipse seems to only perform JUnit 3 style tests if your test-class extends from TestCase. If you remove the inheritance, the annotations worked for me.

Beware that you need to statically import all the required assert* methods like import static org.junit.Assert.*.

Solution 28 - Java

I also faced the same issue while running JUnit test. I resolved this by putting the annotation @Test just above the main test function.

Solution 29 - Java

I had to do a mvn clean on command line then project->clean in eclipse. I renamed the class beforehand then renamed it back but i doubt that helped.

Solution 30 - Java

I'm also running Eclipse with Maven (m2e 1.4). The tests were running with Maven, but not with Eclipse... even after several application of Maven>Update project.

My solution was to add some lines in the .classpath generated by m2e. The lines are now sticking.

<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>

Solution 31 - Java

I have this problem from time to time. The thing that resolves the issue most for me is to run the JUnit test from Run configurations... ensuring that JUnit 4 is set as the test runner.

Generally, I see this issue when attempting to Run As... Junit test from the context menu on the Package Explorer. If you right click the code for the test you are trying to run and instead of selecting Run As... Junit Test you select Run configurations... ensure the Project, Test Class and test runner are set correctly, clicking apply, then run works all the time for me.

Solution 32 - Java

I started to work with Selenium and Eclipse in my job and I was doing my first automated test and I deleted from the code @Before, @Test, and @After notes and I was having this issue "No tests found with test runner junit4".

My solution it was simply to add again the @Before, @Test and @After notes and with that my script worked. Is important to not delete this from the code.

This is a simple test that uses Google to search something:

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

Solution 33 - Java

Using ScalaIDE (3.0.4-2.11-20140723-2253-Typesafe) I was having a similar problem with the Right Click Scala Test Class-> Run As -> Scala Junit Test context menu.

I tried editting the class(but not for a compile failure), cleaning, closing the project, closing Eclipse. None of those worked to restore the context menu for classes that had previously worked well. The test classes don't use the @Test annotation and instead use the @RunWith(classOf[JUnitRunner]) annotation at the top of the class using ScalaTest code.

When I tried choosing Scala Junit Test from the Run Configuration launch editor directly, I received the dialog from the question. Footix29's answer was the key for me.

I noticed that even though I had cleaned my project a few times, my classes in the /bin directory hadn't actually been rebuilt in a while.

Here's how I got back the context menu, and was able to once again run Scala Junit Tests:

  • manually cleaned the classes by deleting the /bin/<package dir>* via Explorer
  • Project -> Cleaned the project along with a full rebuild

I suspect that a class edit in general is able to clean some saved state of Eclipse and get it going again. In my case all of the previously working classes I tried had failed so the manual clean step was just the hammer I needed. However, other tricks that affect Eclipse's concept of the class path/build state should also work.

Further, I think that this behaviour was triggered in part by attempting to refactor a Scala class by renaming it( which the Scala Eclipse IDE sucks at ), where all the cleanup after the initial file change is manual. There were no build errors, but there were also no warnings that I was expecting meaning something was definitely stuck in Eclipse's build state info.

Solution 34 - Java

My problem was using **

> testng

** package org.testng.Assert;

You can replace it in libraries of the project (Maven) with JUnit and then need to refactor project.
OR add TestNG Eclipse plug-in

http://testng.org/doc/eclipse.html

Solution 35 - Java

I had this issue when my Java class name was similar to the Test class name. Just updated the name of the Test class by post fixing it with keywork "Test" and it started working

Before: Java class : ACMEController Test class : ACMEController

After: Java class : ACMEController Test class : ACMEControllerTest

Solution 36 - Java

In my case the issue was the generics parameters:

public class TestClass<T extends Serializable> {

removing :

> <T extends Serializable>

and the option was available again.

I'm using Junit4

Solution 37 - Java

You might be able to solve this simply by renaming your test class to have a name that ends with Test, e.g. ThisAndThatTest

Solution 38 - Java

Check for updates! Eclipse is no doubt fully aware of this problem considering how many workarounds have been presented. There is obviously something systemic involved...something that defies explanation or any sense of consistency. It would have been useful if Eclipse would have let the community know what the problem was and how it was fixed.

Another recent find for me was to delete any source directories that had no files or the all files were excluded.

Solution 39 - Java

If you're sure it used to work and now it's not working anymore, chances are that the Java index got corrupted. In the preferences, search for "java index"; it's in "Java" and then there's a button "Rebuild Index" (or use Ctrl+3, "Find Actions", to quickly search for "Rebuild Java Index"). Once selected, the next time you try to run the JUnit test you should see that Eclipse is rebuilding the Java index and the JUnit tests should start now.

Solution 40 - Java

I ran into this issue because I had a @BeforeClass that was not static.

For some reason the error wasn't exposed through my normal junit run configuration.

Solution 41 - Java

I tried all the answers above.

In my case my project had both junit4 and junit5 dependencies. I was trying to use junit4 so after making sure I used correct junit4 imports it still did not work.

I finally found the problem. The eclipse JUnit runner used in the debug configuration was set to JUnit5. I changed it to JUnit4 and the tests are now found and executed.

Solution 42 - Java

Using JUnit4 and a Gradle-based project, none of the earlier suggestions worked in my case. What did work was:

  1. Right click your test source folder, and click Properties
  2. Jump to Run/Debug Settings
  3. Select all of the run/debug configurations, and delete them.

My guess is that one of these launch configurations was messing up my JUnit4 runner. Resetting all of the run/debug configurations solved JUnit4 not finding any tests to run.

Solution 43 - Java

I tried all of the suggestions above. Only deleting existing test run configurations for that class finally resolved it. Eclipse is weird...

Solution 44 - Java

There are two reasons for this Exception:

  1. The source code hasn’t been compiled YET.
  2. Or on the contrary, the source code has been compiled BUT it cannot been found by JUnit.

For reason one, it has no leg to stand. Because like many people said: the ‘old’ methods work perfectly. Only the new-added methods cannot been identified. Then the second reason became the only explanation: JUnit can NOT find the freshly compiled classes. Having that in mind, I did this: Right click the project ->Java Build Path -> Edit Source item: project_name/src/test/java’s Output folder, change the Output folder into a ‘Specific output folder(path relative to project_name). Provide this value: target/test-class. Be hold: This is the default test source codes’ output folder defined by Maven. It has been overwrote by M2E (or me). That’s why JUnit cannot find it. So my guess is many people who had run into this lovely exception are most likely dealing with a Web project which is managed by Maven. Am I right?! This also contributed my conclusion that reason one should be excluded -- “old” methods can be found is because they had been automatically compiled when the Tomcat was (re)started. Into the ‘wrong’ path maybe, but JUnit found it anyway.

Before I had figured this out. I tried many things as advised: update to the latest JUnit4, Back and forth between build path and use as source folder, capital Test vs test, etc. Nothing happened until I specifically identified the output location for the test source. With all those explanation, my second reason should be re-phrased as this: the new codes had not been timely compiled to the right path! Good luck.

Solution 45 - Java

I also faced this Issue while implementing @RunWith(Cucumber.class). Since this annotation was inside a Public class and hence Eclipse Shows this "No tests found with test runner not found" error.

Once I called / placed the test runner annotation before the runner class, The tests showed up nicely.

Readers must identify which Junit Test Runner they are using. One can check with @RunWith(JUnit4.class) is Outside or inside the runner.class parenthesis {}. If its inside, Please place it outside.

Solution 46 - Java

If you are trying to setup junit 5 add @RunWith(JUnitPlatform.class)

and import org.junit.platform.runner.JUnitPlatform; so that eclipse can recognize the junit 5 test classes as test classes

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionuser281070View Question on Stackoverflow
Solution 1 - JavaGermánView Answer on Stackoverflow
Solution 2 - JavaJamesGView Answer on Stackoverflow
Solution 3 - JavaDimaView Answer on Stackoverflow
Solution 4 - JavanephilimView Answer on Stackoverflow
Solution 5 - JavatoomasrView Answer on Stackoverflow
Solution 6 - JavaMike ChoiView Answer on Stackoverflow
Solution 7 - JavaMatthew WiseView Answer on Stackoverflow
Solution 8 - JavaRoman CView Answer on Stackoverflow
Solution 9 - JavarevindranView Answer on Stackoverflow
Solution 10 - JavaEyal ZamirView Answer on Stackoverflow
Solution 11 - JavaMaheshView Answer on Stackoverflow
Solution 12 - JavaSergiiView Answer on Stackoverflow
Solution 13 - JavaJosh TView Answer on Stackoverflow
Solution 14 - JavaFootix29View Answer on Stackoverflow
Solution 15 - JavaSimonBView Answer on Stackoverflow
Solution 16 - JavaVonCView Answer on Stackoverflow
Solution 17 - JavacellepoView Answer on Stackoverflow
Solution 18 - JavaTodor KolevView Answer on Stackoverflow
Solution 19 - Javauser3022123View Answer on Stackoverflow
Solution 20 - JavaKundan AtreView Answer on Stackoverflow
Solution 21 - JavaMindBrainView Answer on Stackoverflow
Solution 22 - JavaVu TruongView Answer on Stackoverflow
Solution 23 - JavarichView Answer on Stackoverflow
Solution 24 - JavaMikeView Answer on Stackoverflow
Solution 25 - Javab.rothView Answer on Stackoverflow
Solution 26 - JavaAnnaView Answer on Stackoverflow
Solution 27 - JavaMartin C.View Answer on Stackoverflow
Solution 28 - JavaRajithView Answer on Stackoverflow
Solution 29 - Javajoe othersideView Answer on Stackoverflow
Solution 30 - JavapascalView Answer on Stackoverflow
Solution 31 - JavatheINtoyView Answer on Stackoverflow
Solution 32 - JavaJuanTorreView Answer on Stackoverflow
Solution 33 - Javan0741337View Answer on Stackoverflow
Solution 34 - Javamohsen.nourView Answer on Stackoverflow
Solution 35 - JavaRavikiran buttiView Answer on Stackoverflow
Solution 36 - JavafidudiduView Answer on Stackoverflow
Solution 37 - JavaMax TardiveauView Answer on Stackoverflow
Solution 38 - JavaRichard JessopView Answer on Stackoverflow
Solution 39 - Javalorenzo-bettiniView Answer on Stackoverflow
Solution 40 - JavaKeith TylerView Answer on Stackoverflow
Solution 41 - JavaNickView Answer on Stackoverflow
Solution 42 - JavajevonView Answer on Stackoverflow
Solution 43 - Javanick_j_whiteView Answer on Stackoverflow
Solution 44 - JavaHeatherView Answer on Stackoverflow
Solution 45 - JavaHimadriView Answer on Stackoverflow
Solution 46 - JavaAnand RockzzView Answer on Stackoverflow