研究了一下午,费话少说,直接上代码,依赖commons-io,有兴趣的朋友自己深究:
package com.carver;
import java.io.File;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.filefilter.IOFileFilter;
import org.apache.commons.io.filefilter.TrueFileFilter;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.junit.runners.model.InitializationError;
@RunWith(TestAll.class)
public class TestAll extends Suite {
public TestAll(Class<?> setupClass) throws InitializationError {
super(setupClass, findAllTestClasses());
}
private static Class<?>[] findAllTestClasses() {
File srcDir = new File(TestAll.class.getResource("/").getFile());
Collection<File> files = FileUtils.listFiles(srcDir, new IOFileFilter() {
public boolean accept(File file) {
return file.getName().endsWith("Test.class");
}
public boolean accept(File dir, String name) {
return true;
}
}, TrueFileFilter.INSTANCE);
List<Class<?>> classList = new ArrayList<Class<?>>();
for (File file : files) {
String className = file.getAbsolutePath().replace(srcDir.getAbsolutePath() + File.separator, "");
className = className.replace(File.separator, ".");
className = className.replace(".class", "");
try {
classList.add(Class.forName(className));
} catch (Exception e) {
e.printStackTrace();
}
}
return classList.toArray(new Class<?>[0]);
}
}
用Eclipse打开TestAll类,按Ctrl+F11,所有单元测试(不管是采用Annotation还是继承TestCase)一起来。。。