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;
}
}