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

        

Reply via email to