测试代码必须要做的几件事
- 准备测试需要的条件
- 调用要测试的方法
- 验证被测试方法的行为和期望是否一致
- 完成后清理各种资源
TestCase
测试类继承TestCase
,测试方法以test
开头,可通过带参构造方法通过名字创建 TestCase
可以在类中添加 suite 方法来选择性执行
public static Test suite(){
System.out.println("suite");
TestSuite suite = new TestSuite();
suite.addTest(new TestLargest("testLargest"));
return suite;
}
TestSuite
用于组合测试
TestSuite suite= new TestSuite();
suite.addTest(new MathTest("testAdd"));
suite.addTest(new MathTest("testDivideByZero"));
大量测试时
Class[] testClasses = { MathTest.class, AnotherTest.class }
TestSuite suite= new TestSuite(testClasses);
Pre-Method 的 setUp tearDown
每个 test 前都会执行setUp,完成后执行 tearDown
protected void setUp() throws Exception {}
@Override
protected void tearDown() throws Exception {}
Pre-Suite 的 setUp tearDown
suite 前后执行一次 setUp tearDown
将 suite(无论通过通过什么方法创建 suite) 通过 TestSetup 包装
public static Test suite(){
TestSuite suite = new TestSuite();
suite.addTest(new TestLargest("testLargest"));
suite.addTest(new TestLargest("testSmallest"));
TestSetup suiteSetup = new TestSetup(suite){
@Override
protected void setUp() throws Exception {
System.out.println("suite setup");
}
@Override
protected void tearDown() throws Exception {
System.out.println("suite tearDown");
}
};
return suiteSetup;
}
断言方法
assertEquals()
assertTrue()
assertFalse()
assertNull()
assertNotNull()
assertSame()
assertNotSame()
fail()
failNotEquals()
failSame()
failNotSame()
自定义断言
创建自己的测试基类,在基类中提供自己的断言方法
public class BaseTestCase extends TestCase {
protected void setUp() throws Exception {
super.setUp();
}
protected void tearDown() throws Exception {
super.tearDown();
}
public void assertGood(int score){
assertTrue( score >= 60);
}
}
JUnit 和异常
对测试而言,有两种异常
- 从测试代码抛出的可预测浴场
- 由某个模块(代码)发生的严重错误,而抛出的不可预测异常
public void testSortList() throws NullPointerException {
try {
MyClass.sortList(null);
fail();
} catch (Exception e) {
assertTrue(true);
}
}
更具体的测试方法还有待研究
简单的总结
使用 junit 进行测试,一般可以总结为如下 4 个步骤:
- 写测试类并继承 TestCase 类;
- 写测试方法 testXXXX();
- 写测试套件类将 test case 加入 test suite;
运行 TestRunner 进行测试;
public static Test suite()为缺省的 TestSuite 入口,默认运行测试类 中的所有测试方法,故一般 suite()方法可以省略不写。
junit TestRunner 有三种分别为基于 AWT,SWING,TEXT 三种
附一份非常简练的Junit3、4的教程