I have switched to JUnit4.4 from JUnit3.8. I run my tests using ant, all my tests run successfully but test utility classes fail with "No runnable methods" error. The pattern I am using is to include all classes with name *Test* under test folder.
I understand that the runner can't find any method annotated with @Test attribute. But they don't contain such annotation because these classes are not tests. Surprisingly when running these tests in eclipse, it doesn't complain about these classes.
In JUnit3.8 it wasn't a problem at all since these utility classes didn't extend TestCase so the runner didn't try to execute them.
I know I can exclude these specific classes in the junit target in ant script. But I don't want to change the build file upon every new utility class I add. I can also rename the classes (but giving good names to classes was always my weakest talent :-) )
Is there any elegant solution for this problem?
My specific case has the following scenario. Our tests
all extend
and JUnit was trying to run BaseTixContainerTest. Poor BaseTixContainerTest was just trying to setup the container, setup the client, order some pizza and relax... man.
As mentioned previously, you can annotate the class with
But that caused JUnit to report that test as skipped (as opposed to completely ignored).
That kind of irritated me.
So I made BaseTixContainerTest abstract, and now JUnit truly ignores it.
Be careful when using an IDE's code-completion to add the import for
@Test
.It has to be
import org.junit.Test
and notimport org.testng.annotations.Test
, for example. If you do the latter, you'll get the "no runnable methods" error.In your test class if wrote import org.junit.jupiter.api.Test; delete it and write import org.junit.Test; In this case it worked me as well.
Assuming you're in control of the pattern used to find test classes, I'd suggest changing it to match
*Test
rather than*Test*
. That wayTestHelper
won't get matched, butFooTest
will.What about adding an empty test method to these classes?