Android、JUnit深入浅出(三)——JUnit深入解析(下)

前面我们学习了junit.framework包,本篇幅我们开始学习android.test包,了解Android SDK是如何扩展junit.framework包。

首先整理android.test包的结构,如下图所示:

android.test1

在前面的篇幅中说明过:TestCase与TestSuite之间的关系,有些类似于图元对象与容器对象之间的关系。有了这个思想,顺着这张的主线图从上往下看:首先看到的是TestCase类,接着看到InstrumentationTestCase、AndroidTestCase,最后看到ApplicationTestCase,ProviderTestCase2,ServiceTestCase,ActivityTestCase。这不就是Android 系统中4大组成元素:Activity、Provider、Service、BroadCast中的前3个,然后我们在看下Android SDK中的说明:

说明
AndroidTestCase 如果你要访问资源或其他东西依赖于Activity的环境,在这个类的基础上扩展。
ActivityInstrumentationTestCase2
<T extends Activity>
这个类提供了一个单一的活动功能测试
ApplicationTestCase
<T extends Application>
提供了一个框架,可以在受控环境中测试Application类
ProviderTestCase2
<T extends ContentProvider>
提供了一个框架,可以在受控环境中测试ContentProvider类
ServiceTestCase
<T extends Service>
提供了一个框架,可以在受控环境中测试ServiceTest类。

这些类就不在这里说明,应该与我们平时使用Activity、Service、Provider基本一样。下面举个例子,来说明如何使用这些类,我们就将上一篇J2SE测试例子,在Android中实现:

//MathTest.java
import android.test.AndroidTestCase;
import android.util.Log;
public class MathTest extends AndroidTestCase
{
protected double fValue1;
protected double fValue2;
protected double fRe;
static final String LOG_TAG = “MathTest”;
protected void setUp() {
fValue1= 2.0;
fValue2= 3.0;
fRe = 5.0;
}

public void testAdd()
{
Log.d( LOG_TAG, “testAdd” );
assertTrue( LOG_TAG+”1″, ( (fValue1 + fValue2 ) == fRe ) );
}
}

//ExampleSuite.java
import junit.framework.TestSuite;
public class ExampleSuite extends TestSuite
{
public ExampleSuite()
{
addTestSuite( MathTest.class );
}
}

上一篇的例子比较后发现,除了引用的包、父类不一样以外,其他部分是完全一样的,在Android AVD上运行程序后看到的结果如下:

android-junit

单击按钮“Launch test”运行测试用例,输出测试结果,我们的测试都通过了。这个测试界面是我们自己编写的单元测试的界面,下一篇幅我们将重点介绍这部分。

总结说明

这里我们简要学习了android.test包,其实这个的内容远不止这些,包含:3个Interface、20个class、2个Error,列举如下:

android-test-class

android.test包深入的学习,只有到Android SDK中去仔细阅读了。通过学习android.test,让我们对Android 系统的组成元素:Activity、Provider、Service有了更加深入的了解。