I was able to get this to work by modifying the sure-fire plugin source. I updated AbstractDirectoryTestSuite.collectTests() to be protected. And I over-rode that method in JUnit4DirectoryTestSuite to list all the jars from the class path and search for unit tests within them adding the discovered unit tests to the list of collected tests. It does seem to work.
I guess, if SurefirePlugin, exposed the name of junit4DirectoryTestSuite as a parameter, like it exposes the testNG and junit artifact names. I would have been able to accomplish this without needing any changes to the plugin codebase. In case it's useful for folks, here is the background on why I'm wanting to do this. I'm using this mechanism to be able to create patch projects/artifacts for artifacts that only include the source for classes that are updated for that patch. These patch projects designate the project/artifact being patched as a parent. The patch project only contains the sources and unit tests for functionality that has been modified / added in the patch. The jar generated by these projects only have the patched classes and I can apply this patch by placing this jar ahead of the actual artifact's jar, in the classpath, in an installation. Along with running the unit tests that I have created for the patch, I do want to be able to run all the unit tests for the project/artifact being patched, so that I can verify that the entire project continues to work, as expected, with the changes. Through this mechanism I have that ability. Ofcourse, the artifact being patched has to export it's to the maven repository, so that the patch project can depend on it, but that's easy. Cheers, Anshul On Thu, Mar 26, 2009 at 1:57 PM, Anshul Jaiswal <[email protected]>wrote: > Thanks for your replies, Brett and Stephen! > > I was able to use the @RunWith with a Suite subclass that would search for > unit tests within jars in the classpath. However, the problem with that > approach is that all the unit tests run within the same JVM. Whereas we want > all the unit tests to be forked, pretty much like forkMode=always. > > Looking through the code, it appears to me that I can write my own subclass > of org.apache.maven.surefire.suite.AbstractDirectoryTestSuite and override > its locateTestSets() method (actually I just want to override collectTests() > but that is private) to be able to implement my own test discovery > algorithm. > > However, it's not clear to me how I can get surefire plugin to use my > subclass instead of the Junit one. I guess I may have to create my own > surefire-provider? I guess I can do that by starting with (or extending) the > junit4 provider. Lets say I do that how, is there a way to get surefire to > use my provider instead of junit 4. > > Cheers, > Anshul > > > > > On Fri, Mar 20, 2009 at 1:53 PM, Anshul Jaiswal > <[email protected]>wrote: > >> Folks, >> >> The surefire plugin currently supports automatically searching for unit >> testing classes from a directory. >> >> I was wondering if there is way for it to search for unit tests from a set >> of jar files instead of a directory. ie., a mechanism where I can specify a >> regex pattern for the package and/or class name and it can search through >> all the jars in the 'test' scope for classes matching that pattern and run >> them. >> >> Thanks in advance! >> Anshul >> > >
