12、如何创建测试包?-- 手工创建与自动创建
/** *手工创建: *下面这个简单的测试运行器负责创建测试包,首先添加各个测试然后添加整个测试包。 */ import junit.framework.Test; import junit.framework.TestSuite; public class TestRunner { public static TestSuite suite() { TestSuite t = new TestSuite(); t.addTest(new HelloWorldTest("testSayHello")); t.addTest(new SimpleTest("testTest")); t.addTestSuite(TestRunner.class); return t; } public static void main(String args[]) { junit.textui.TestRunner.run(suite()); } } 运行: java -classpath %CLASSPATH%;. TestRunner (我的TestRunner.class放在与test同级的test目录下) /** *自动创建: *从命令行上读取测试目录,遍历整个目录寻找扩展名为“.class”的文件,然后把它们加到测试包里。 */ import junit.framework.Test; import junit.framework.TestSuite; import java.lang.ClassNotFoundException; import java.io.*; import java.util.Vector; public class AllRunner { public static void class_list(File directory, TestSuite t) { if (directory.isDirectory()) { String[] files = directory.list(); for (int i = 0; i < files.length; i++) { File f = new File(directory, files[i]); if (f.isFile() && f.getName().endsWith(".class")) { int len = f.getName().length(); String n = f.getName().substring(0, len - 6); try { t.addTestSuite(Class.forName(n)); } catch (java.lang.ClassNotFoundException e) { System.out.println(e); } } } } } public static void main(String args[]) { TestSuite t = new TestSuite("请输入欲测试的目录名: " + args[0]); AllRunner.class_list(new File(args[0]), t); junit.textui.TestRunner.run(t); } }
技巧:将所有的测试案例放到一个tmp目录下,运行
java -classpath %CLASSPATH%;. AllRunner ../tmp
(我的AllRunner.class放在与test同级的目录test目录下)
就这个例子来说,创建的测试运行器运行了指定目录下的所有测试,并把结果屏幕显示。当然,我们动态创建的测试包假定所有的测试都要运行而且按照从目录中以字母顺序读取的顺序运行。
不对将执行的测试进行选择也是一种可能的测试需求,不过,在这种情况下你就只能手工地把测试加到测试包里。
注意:我们的测试运行器(TestRunner)采用Java类装载器导入类,所以装载器要装载的类一定要位于类路径下(因此我已将d:\j2sdk1.4\mywork下的class目录加到CLASSPATH中去了)。
测试运行器的输出结果就是测试结果,因为输出结果表示了目录下所有测试的状态,所以这种测试对我们的开发工作很有帮助。
12、如何与 Ant 集成?
集成Junit的Ant可以帮助我们快速地测试系统的变动。Jakarta Project给Ant创建了集成Junit的任务。这些任务可以自动地运行测试同时产生输出结果和报告。
13、如何放置test文件?
与原文件分开放置,但结构与包相同。如下所示:
src com xyz SomeClass.java test com xyz SomeClass.java