[
http://jira.codehaus.org/browse/SUREFIRE-482?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=229278#action_229278
]
Tom Eugelink commented on SUREFIRE-482:
---------------------------------------
I took a quick peek in the source code. The logic that decides what to include
is in the surefire-api artifact (maven-surefire-plugin -> surefire-booter ->
surefire-api). In the plugin a default filename include pattern (Test*.java,
*Test.java, *TestCase.java) is defined and that is handed over to the
collectTests() method in the SurefireDirectoryScanner class. This method uses
org.codehaus.plexus.util.DirectoryScanner to simply scan for files matching the
patterns. There is no checking on extending of TestCase or annotations what so
ever.
So.
It would not be too difficult to examine the resulting list of classes for
these things. The problem is; the code at this level does not know what the
actual test environment is, it just handles files. It has no awareness of
JUnit3, JUnit4 or possibly other testers. I have not enough understanding of
SureFire at this time.
> 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