试代码。
最后需要说明的:对TestCase的管理,是完全界面化的,JUnit会自动产生UI界面,运行以上测试的例子,JUnit的界面如下:
整个JUnit的数据包应该是很强大的,但是一般来说,不一定每个工程都需要这些数据包,而是在JUnit部分数据包的基础上扩展出自己的数据包,Android SDK中也不例外。至于JUnit完整的包,这里我们就不详细分析了,我们这里只解析Android SDK中包含的那些JUnit数据包,以及Android SDK在JUnit的基础上扩展的一些数据包,如下:
SDK 功能说明 junit.framework JUnit测试框架 junit.runner 实用工具类支持JUnit测试框架 android.test Android 对JUnit测试框架的扩展包 android.test.mock Android的一些辅助类 android.test.suitebuilder 实用工具类,支持类的测试运行 在这些包中最为重要的是:junit.framework、android.test,其中前者是JUnit的核心包,后者是Andoid SDK在Junit.framework的基础上扩展出来的包,我们将重点介绍这2个包。
junit.framework包解析
通过这张图,大家就可以比较清晰的看到JUnit的主要框架,再回去看下上面的例子,对前面的例子感觉明白多了。做个简要的总结,如下:
> TestSuit:TestSuite是测试用例的集合;
> TestCase:定义运行多个测试用例;
> TestResult:收集一个测试案例的结果,测试结果分为失败和错误,如果未能预计的断言就是失败,错误就像一个ArrayIndexOutOfBoundsException异常而导致的无法预料的
问题;
> TestFailure:测试失败时捕获的异常;
> Assert:断言的方法集,当断言失败时显示信息;
JUnit步骤:
第一步:实现TestCase
1. 继承父类TestCase;
2. 定义一下变量在测试中使用;
3. 在setUp()中初始化这些变量;
4. 在tearDown()中清理这些变量;
public class MathTest extends TestCase{
protected double fValue1;
protected double fValue2;
protected void setUp(){
fValue1= 2.0;
fValue2= 3.0;
}
}
5. 编写测试单元代码;
public void testAdd() {
double result= fValue1 + fValue2;
assertTrue(result == 5.0);
}
6. 运行测试用例,这里有2种方法可以使用:
* 静态类型:覆盖runTest()和定义测试函数。最
常用的就是采用java的匿名类,如下:
TestCase test= new MathTest("add"){
public void runTest() { testAdd();}
};
test.run();
* 动态类型:使用反射来实现runTest,它动态地发现并调用的方法,在这种情况下,测试案例的名字对应的测试方法来运行,如下:TestCase test = new MathTest("testAdd");
test.run();
相比之下,第2种更符合面向对象的思维。
第二步:将TestCase添加到TestSuilt
TestSuite suite= new TestSuite();
suite.addTest(new MathTe