1. 管理测试用例。修改了哪些代码,这些代码的修改会对哪些部分有影响,通过JUnit将这次的修改做个完整测试。这也就JUnit中所谓的TestSuite。
2. 定义测试代码。这也就是JUnit中所谓的TestCase,根据源代码的测试需要定义每个TestCase,并将TestCase添加到相应的TestSuite方便管理。
3. 定义测试环境。在TestCase测试前会先调用“环境”配置,在测试中使用,当然也可以在测试用例中直接定义测试环境。
4. 检测测试结果。对于每种正常、异常情况下的测试,运行结果是什么、结果是否是我们预期的等都需要有个明确的定义,JUnit在这方面提供了强大的功能。
以上部分与我们平常使用IDE调试的过程是完全一样的,只不过是增加了测试用例管理、测试结果检测等功能,提高了单元的效率,保证了单元测试的完整性,明确了单元测试的目标。
import java.util.ArrayList;
import java.util.Collection;
import junit.framework.TestCase;
public class SampleTest extends TestCase {
protected void setUp() {
/* 开始test前的准备操作:初始化,获取数据连接... */
}
protected void tearDown() {
/* 完成test后的清理工作:关闭文件, 关闭数据连接... */
}
public void testEmpty() {
/* test case 1*/
Collection collection = new ArrarList();
assertTrue(collection.isEmpty());
}
public void testCase2() {
/* test case 2*/
ArrayList emptyList = new ArrayList();
try {
Object o = emptyList.get(0);
fail("Should raise an IndexOutOfBoundsException");
} catch (IndexOutOfBoundsException expected) {
assertTrue(true);
}
}
}
1. 当需要进行test前后操作,则对setUp(), tearDown()这两个方法进行重写。
1 setUp()
2 testYYY()
3 tearDown()
4 setUp()
5 testXXX()
6 tearDown()
所以每个testcase不要存在数据上的前后联系。
import junit.framework.TestSuite;
public static Test suite() {
/* 添加SampleTest类到TestSuite*/
return new TestSuite(SampleTest.class);
}
public static void main(String args[]) {
/* 指定文本界面*/
junit.textui.TestRunner.run(suite());
}
junit.textui.TestRunner.run(SampleTest.class);
}
import junit.framework.Test;
import junit.framework.TestSuite;
public class SampleTestSuite {
public static Test suite() {
TestSuite suite = new TestSuite("Sample Tests");
/* 逐一添加testCase类 */
suite.addTestSuite(SampleTest.class);
/* 逐一添加test suite(注意,这是递归调用的) */
suite.addTest(AnotherTestSuite.suite());
return suite;
}
public static void main(String args[]) {
junit.textui.TestRunner.run(suite());
}
}
import junit.extensions.TestSetup;
public class AllTestsOneTimeSetup {
public static Test suite() {
TestSuite suite = new TestSuite();
suite.addTest(SomeTest.suite());
suite.addTest(AnotherTest.suite());
TestSetup wrapper = new TestSetup(suite) {
protected void setUp() {
oneTimeSetUp();
}
protected void tearDown() {
oneTimeTearDown();
}
};
return wrapper;
}
public static void oneTimeSetUp() {
// one-time initialization code
}
public static void oneTimeTearDown() {
// one-time cleanup code
}
}
















