[
http://jira.codehaus.org/browse/SUREFIRE-482?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=229294#action_229294
]
Tom Eugelink commented on SUREFIRE-482:
---------------------------------------
Oh my, that was easy. JUnit4DirectoryTestSuite has a method that actually
creates the test runner and it is allowed to return null. So all that needs to
be done is check for a method with the @Test annotation. If not found, return
null.
Here it is:
protected SurefireTestSet createTestSet( Class testClass, ClassLoader
classLoader )
throws TestSetFailedException
{
// this is JUnit4: check to see if there are any methods with a
@Test annotations
boolean lTestFound = false;
for (Method lMethod : testClass.getDeclaredMethods())
{
for (Annotation lAnnotation : lMethod.getAnnotations())
{
if (org.junit.Test.class.isAssignableFrom(
lAnnotation.annotationType() ))
{
lTestFound = true;
break;
}
}
}
// if not test found, simply return null
if (lTestFound == false) return null;
// create the testset
return new JUnit4TestSet( testClass );
}
> Surefire tries to run JUnit4 tests that contain no @Test annotations
> --------------------------------------------------------------------
>
> Key: SUREFIRE-482
> URL: http://jira.codehaus.org/browse/SUREFIRE-482
> Project: Maven Surefire
> Issue Type: Bug
> Components: Junit 4.x support
> Affects Versions: 2.4.2
> Reporter: Mark Hobson
> Attachments: test.zip
>
>
> Similar to SUREFIRE-346 but for JUnit4, Surefire tries to run classes that
> contain no @Test annotations as tests, resulting in the exception:
> java.lang.Exception: No runnable methods
> at
> org.junit.internal.runners.MethodValidator.validateInstanceMethods(MethodValidator.java:32)
> at
> org.junit.internal.runners.MethodValidator.validateMethodsForDefaultRunner(MethodValidator.java:43)
> at
> org.junit.internal.runners.JUnit4ClassRunner.validate(JUnit4ClassRunner.java:36)
> at
> org.junit.internal.runners.JUnit4ClassRunner.<init>(JUnit4ClassRunner.java:27)
> at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native
> Method)
> at
> sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
> at
> sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
> at java.lang.reflect.Constructor.newInstance(Constructor.java:494)
> at
> org.junit.internal.requests.ClassRequest.buildRunner(ClassRequest.java:33)
> at
> org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:28)
> at
> org.apache.maven.surefire.junit4.JUnit4TestSet.<init>(JUnit4TestSet.java:45)
> at
> org.apache.maven.surefire.junit4.JUnit4DirectoryTestSuite.createTestSet(JUnit4DirectoryTestSuite.java:56)
> at
> org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.locateTestSets(AbstractDirectoryTestSuite.java:96)
> at
> org.apache.maven.surefire.Surefire.createSuiteFromDefinition(Surefire.java:209)
> at org.apache.maven.surefire.Surefire.run(Surefire.java:156)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> at java.lang.reflect.Method.invoke(Method.java:585)
> at
> org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(SurefireBooter.java:338)
> at
> org.apache.maven.surefire.booter.SurefireBooter.main(SurefireBooter.java:997)
> Such classes should be ignored by Surefire.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://jira.codehaus.org/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira