本文将介绍如何在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中有变化。具体来说,需要在`
```xml
package="com.example.myapplication">
```
在AndroidManifestxml中注册相关的测试环境(这些是Android独有的):
```xml
android:name="android.test.Instrumentation" android:targetPackage="com.example.yourapp" /> ``` 实现使用相关的运行测试类库,` 接下来在测试工程中创建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程序设计有所帮助。