本文将介绍如何在Android中进行单元测试。首先,我们来看一下完整的实例代码,点击此处即可下载。本文是在上一篇文章《Java编程之单元测试(Junit)实例分析》的基础上继续讲解Android的单元测试。在Android源码中,引入了Java单元测试的框架,该框架位于`libcore\junit\src\main\java\junit\framework`目录下。接下来,我们将在Java单元测试框架的基础上扩展属于Android自己的测试框架。

从类关系图中可以看出,通过Android测试类可以实现对Android中相关重要的组件进行测试,如Activity、Service、ContentProvider,甚至是application。实际上,在Android源码中,基本上每个系统应用都自带一个测试工程。例如,在下面的源码中,settings(设置)模块就自带了一个单元测试工程:

```arduino

tests文件夹中的代码示例

```

有兴趣的读者可以自行去研读一下源代码。

接下来,我们将在Eclipse环境下进行Android单元测试。首先确保已经搭建好了Eclipse中的Android环境。然后按照以下步骤操作:

1. Application的测试:新建一个Android项目,在该Android项目中添加一个继承自Application的类。代码如下:

```java

public class MyApplication extends Application {

// ...

}

```

Appication类创建好后,接着创建对应的测试工程:选中其所在的Android工程 -> 鼠标右键 -> new -> Android Test Project -> 输入测试工程名 -> next -> 选择被测试的目标Android工程(此处为FxAndroidApplication所在的Android工程)。这样,一个测试工程就创建完成了。

通过Eclipse创建自动生成的测试工程项目和Android工程项目结构上没什么大的区别,主要是在AndroidManifest.xml中有变化。具体来说,需要在``标签内添加`android:name=".MyApplication"`属性,以便在测试环境中使用自定义的Application类。修改后的AndroidManifest.xml文件示例如下:

```xml

package="com.example.myapplication">

```

在AndroidManifestxml中注册相关的测试环境(这些是Android独有的):

```xml

android:name="android.test.Instrumentation"

android:targetPackage="com.example.yourapp" />

```

实现使用相关的运行测试类库,``中的`targetPackage`为被测试类所在的包。

接下来在测试工程中创建FxAndroidApplication的测试类,代码如下:

```java

public class FxApplicationTest extends AndroidJUnit4ClassRunner {

public FxApplicationTest(Class testClass) throws InitializationError {

super(testClass);

}

@Override

protected void setUp() throws Exception {

super.setUp();

// 初始化测试环境

}

@Override

protected void tearDown() throws Exception {

// 清理测试环境

super.tearDown();

}

}

```

测试类创建好后,就可以实现对FxAndroidApplication进行测试了。

测试方法:

启动Android模拟器(也可以通过Android手机)------>运行Android工程------>在测试工程中选中测试类FxApplicationTest---->鼠标右键---->Run As---->Android Junit Test。这样,测试结果就可以在Eclipse的Junit视图上显示了,如下图:

![image.png](attachment:image.png)

通过上图的测试结果可知,ApplicationTestCase测试类中有两个测试方法是默认进行测试的(testGetFavourite才是我们要测试的方法)。当然,还可以通过adb进行测试:连接Android手机------->打开电脑命令窗口(开始--->运行---->输入cmd)----->在命令窗口输入adb shell----->am instrument -w com.phicomm.hu.test(测试用例所在的包名)/android.test.InstrumentationTestRunner。

2. Activity的测试:

和上面Application一样,先创建一个Android工程,该工程中创建了两个Activity,一个Activity实现输入用户信息的登录界面,另一个Activity显示输入的用户信息。效果图如下:

登录界面FxLoginActivity的代码如下:

```java

public class FxLoginActivity extends AppCompatActivity {

private Button mLoginButton;

private EditText mUsernameEditText;

private EditText mPasswordEditText;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_fx_login);

mLoginButton = findViewById(R.id.login_button);

mUsernameEditText = findViewById(R.id.username_edit_text);

mPasswordEditText = findViewById(R.id.password_edit_text);

}

}

```

main.xml布局文件的代码如下:

```xml

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical">

android:id="@+id/username_edit_text"

android:layout_width="match_parent"

android:layout_height="wrap_content" />

android:id="@+id/password_edit_text"

android:layout_width="match_parent"

android:layout_height="wrap_content" />

``

本文将介绍如何在Android程序中进行单元测试。首先,我们需要创建一个测试类,该类继承自TestCase。然后,在测试类中编写测试方法,以覆盖我们想要测试的代码部分。

假设我们的FxResultActivity类中有以下两个方法:

```java

public class FxResultActivity extends AppCompatActivity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_fx_result);

}

public void testLogin() {

// 这里编写登录相关的测试代码

}

public void testReset() {

// 这里编写重置相关的测试代码

}

}

```

为了测试testLogin()方法,我们可以在测试类中创建一个新的测试方法:

```java

public class FxResultActivityTest extends TestCase {

public void testLogin() {

// 在这里编写针对testLogin()方法的测试代码

}

}

```

接下来,我们需要运行该测试类进行测试。选中“Run As”->“Android Junit Test”,然后会自动启动模拟器进行相关的输入点击测试。需要注意的是,如果我们在测试过程中发现某个方法没有被测试到,例如testReset(),我们可以尝试注释掉已经执行过的testLogin()方法,以便让程序继续执行testReset()方法的测试。

在这个例子中,我们只需要关注testLogin()和testReset()这两个方法的测试。当我们运行上面的测试类时,结果应该是正确的。希望本文所述对大家Android程序设计有所帮助。