Reputation: 6301
I have inherited a Java project and am new to Java development. I feel a good way for me to get comfortable with the code is to write some tests around it. I'm writing my code using IntelliJ.
My existing project has a folder structure like this:
/myProject
/src
/main
/java
/com.lexcorp
/core
/email
/providers
emailProvider.java
I created a new project that will hold tests for this project. I would like this project to hold both unit and integration tests. Currently, my new project has a structure like this:
/myProjectTests
/src
/main
/java
/com.lexcorp.core.email.providers
emailProviderTest.java
The emailProviderTest.java file looks like the following:
package com.lexcorp.core.email.providers;
import junit.framework.TestCase;
import org.junit.Test;
public class EmailProviderTest extends TestCase {
private final String username = "[testAccount]";
private final String password = "[testPassword]";
@Test
public void thisAlwaysPasses() {
assertTrue(true);
}
}
This project has a Run/Debug configuration with the following properties:
When I run this configuration, I get an error that says:
junit.framework.AssertionFailedError: No tests found in com.lexcorp.core.email.providers.EmailProviderTest
at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:84)
at org.junit.runners.Suite.runChild(Suite.java:127)
at org.junit.runners.Suite.runChild(Suite.java:26)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
at org.junit.runner.JUnitCore.run(JUnitCore.java:160)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:74)
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:202)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:65)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
I do not understand why I'm getting an error that boils down to: "No tests found". While my project structures differ, the folder structures on the OS match (which is another thing that confuses me). Why am I getting this error and how do I fix it?
Upvotes: 78
Views: 77355
Reputation: 1904
I was getting this error, too:
junit.framework.AssertionFailedError: No tests found in ...
The reason was that I forgot to specify
defaultConfig {
...
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
After syncing the project, it found the tests. So maybe it helps someone else.
Upvotes: 169
Reputation: 28865
I bumped into the situation in JUnit 5
when created a private
method:
import org.junit.jupiter.api.Test
class Test1 {
@Test
private fun sort() {
println("1")
}
}
Remove private
.
Upvotes: 2
Reputation: 1
I was fretting with this and none of the answers helped me until i moved the test source file from this folder:
src/test/java/com/junit/test
up to this folder:
src/test/java/com/junit
Upvotes: 0
Reputation: 191
In my case, I needed junit4-version.jar
in the classpath of the task junit and also:
ant-version.jar
ant-junit-version.jar
ant-junit4-version.jar
at the library of my ant installation (/usr/share/ant/lib
).
I was getting the error "junit.framework.AssertionFailedError: No tests found in ..." while I hadn't had ant-junit4-*version*.jar
in the right place.
I corrected this by installing ant-optional debian/ubuntu package:
apt-get install ant-optional
Upvotes: 1
Reputation: 1436
I had the same issue, in Intellij IDEA, for Java framework. I was doing all right:
But I did one thing wrong: the name of the method didn't start with "test", in fact was:
@Test
public void getSomethingTest(){
and when I changed it into:
@Test
public void testGetSomethingTest(){
I've resolved: the executor was finally able to recognize this method as a test method. I've changed nothing else.
Upvotes: 9
Reputation: 2336
Test method name public void testName() {}
Where name() in source naming name methods.
Upvotes: -1
Reputation: 111
if you are using jUnit 4 then not use extends TestCase, removing this fixed error.
Upvotes: 11
Reputation: 13483
I had it when using data provider and one of the parameters had a new line character, like this:
@DataProvider
public static Object[][] invalidAdjustment() {
return new Object[][]{
{"some \n text", false},
};
}
Removing the \n
solved the issue
Upvotes: 0
Reputation: 4691
The other reason generally i see people having method parameters, remove any parameters you might have in the test method, regardless you add @Test annotation , you need to have your method name starting "test" in order for Junit to pick you testcase. hope it helps.
Upvotes: -1
Reputation: 1971
I was getting this too:
junit.framework.AssertionFailedError: No tests found in ...
Solved by renaming the test method from method1
@Test
public void method1(){
// Do some stuff...
}
to testMethod1
@Test
public void testMethod1(){
// Do some stuff...
}
Upvotes: 30
Reputation: 159864
Extending junit.framework.TestCase
is the old JUnit 3 approach of implementing test cases which doesnt work as no methods start with the letters test. Since you're using JUnit 4, just declare the class as
public class EmailProviderTest {
and the test method will be found from the @Test
annotation.
Read: JUnit confusion: use 'extend Testcase' or '@Test'?
Upvotes: 44