alternative test-class scanner (by type filter) ------------------------------------------------
Key: SUREFIRE-458 URL: http://jira.codehaus.org/browse/SUREFIRE-458 Project: Maven Surefire Issue Type: Improvement Components: plugin Affects Versions: 2.4.1 Reporter: manuel aldana hi, currently test filtering is done by using the <include> directive, which includes test-classes by file name pattern. this approach is sometimes a bit annoying for namings of classes are unreliable. test data classes are sometimes named like TestDataForXXX or XXXDataForTest so they are included to testsuite too. a better approach would be to scan test classes by the type. currently we are using gsbase-test-suite scanner to accomplish this. it would be cool if this kind of scanner would be included in surefire-plugin, so it is not neccessary to implement such a collector for each project. following code as example (scans for test-classes which are concrete): {code:java title=Test-class Scanner} import java.lang.reflect.Modifier; import com.gargoylesoftware.base.testing.RecursiveTestSuite; import com.gargoylesoftware.base.testing.TestFilter; import junit.framework.Test; /** @author manuel aldana, [EMAIL PROTECTED] */ public class TestCaseCollector { /** @return Testsuite, which returns all concrete Test-classes */ public static Test suite() throws Exception { return new RecursiveTestSuite("target/test-classes", new TestFilter() { public boolean accept(Class clazz) { if (isConcreteTestCase(clazz)) return true; return false; } }); } private static boolean isConcreteTestCase(Class clazz) { if (isAbstractClass(clazz)) // it is assumed, that abstract classes have no superclasses which are concrete test classes return false; if (clazz.getSuperclass().getName().equals("java.lang.Object")) return false; if (clazz.getSuperclass().getName().equals("junit.framework.TestCase")) return true; // recurse to parents return isConcreteTestCase(clazz.getSuperclass()); } private static boolean isAbstractClass(Class clazz) { if (Modifier.isAbstract(clazz.getModifiers())) return true; return false; } } {code} -- 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