1、目录删除的测试
目录删除类
import java.io.File; public class DeleteAll { public static void deleteAll(File file) { if(file.isFile() || file.list().length == 0) { file.delete(); } else { File[] files = file.listFiles(); for(File f : files) { deleteAll(f); f.delete(); } } } }
其测试类:
import java.io.File; import junit.framework.Assert; import junit.framework.TestCase; public class DeleteAllTest extends TestCase { public void testDeleteAll() { File file = null; try { file = new File("test.txt"); file.createNewFile(); DeleteAll.deleteAll(file); } catch(Exception e) { } boolean isExist = file.exists(); Assert.assertEquals(false, isExist); //Assert.assertFalse(isExist); } /** * 构造的是一个目录结构,其结构表示如下 * d * /\ * / \ * d1 d2 * / \ * s1 s2 * */ public void testDeleteAll2() { File directory = null; try { directory = new File("dir"); directory.mkdir(); File file1 = new File(directory,"file1.txt"); File file2 = new File(directory,"file2.txt"); file1.createNewFile(); file2.createNewFile(); File d1 = new File(directory,"d1"); File d2 = new File(directory,"d2"); d1.mkdir(); d2.mkdir(); File subFile1 = new File(d1,"subtest1.txt"); File subFile2 = new File(d2,"subtest2.txt"); subFile1.createNewFile(); subFile2.createNewFile(); DeleteAll.deleteAll(directory); } catch(Exception e) { Assert.fail(); } Assert.assertNotNull(directory); String[] names = directory.list(); Assert.assertEquals(0, names.length); directory.delete(); } }
2、对私有方法的测试
public class Calculator2 { private int add(int a,int b) { return a + b; } } import java.lang.reflect.Method; import junit.framework.Assert; import junit.framework.TestCase; public class Calculator2Test extends TestCase { public void testAdd() { try { Calculator2 cal2 = new Calculator2(); Class<Calculator2> clazz = Calculator2.class; Method method = clazz.getDeclaredMethod("add",new Class[] {Integer.TYPE,Integer.TYPE}); method.setAccessible(true); Object result = method.invoke(cal2, new Object[]{2,3}); Assert.assertEquals(5, result); } catch(Exception e) { Assert.fail(); } } }
对私有方法的测试使用反射机制来进行。
测试类的私有方法时可以采取两种方式:一是修改方法的修饰符,将private修改为default或public(但是不推荐采取这种方法),二是使用反射在测试类中调用目标类的私有方法(推荐使用这种方法)。
3、使用MyEclipse的Junit Test Case自动生成测试类
在New Java Class图标下有一个Junit Test Case项,使用它可以在提示下一步一步自动生成测试类。
4、TestSuite(测试套件):可以将多个测试组合在一起,同时执行多个测试,实现测试的自动化。
import junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestSuite; public class TestAll extends TestCase { public static Test suite() { TestSuite suite = new TestSuite(); suite.addTestSuite(CalculatorTest.class); suite.addTestSuite(LargestTest.class); suite.addTestSuite(DeleteAllTest.class); return suite; } }
使用RepeatedTest来重复测试指定的类的方法,具体是对测试类添加一个带一个String类型的参数的构造函数,然后在使用RepeatedTest时指定测试的方法。
import junit.extensions.RepeatedTest; import junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestSuite; public class TestAll extends TestCase { public static Test suite() { TestSuite suite = new TestSuite(); suite.addTestSuite(CalculatorTest.class); suite.addTestSuite(LargestTest.class); suite.addTestSuite(DeleteAllTest.class); suite.addTest(new RepeatedTest(new CalculatorTest("testSubtract"),20)); return suite; } }