阅读(862) (10)

IntelliJ IDEA创建单元测试

2018-03-27 09:54:39 更新

IntelliJ IDEA创建单元测试

在 Android 中,单元测试基于 JUnit,JUnit 的平面使用足以测试完全基于 Java 代码的功能。

但是,为了测试 Android 特定的功能,您需要一堆构建在 JUnit 之上的包装类。IntelliJ IDEA 简化了 Android 测试项目构建过程中的大部分任务。

1.确保你的代码是可测试的

单元测试要求源代码的编写方式使得模块之间的依赖关系可以很容易地通过模仿来消除。另外,单元测试要求功能相互隔离。

因为这个 HelloDroid 类的代码不容易测试。在进行单元测试之前,我们首先应用一个快速重构。

  1. 打开 HelloDroid 类,并选择 TapDroid 方法中引用显示消息的生成的代码部分:
    IntelliJ IDEA创建单元测试
  2. 以这种方式重写该 TapDroid 方法,以便它调用新创建的公共帮助方法(GetStringFor Display),如下所示:
    private void TapDroid() {
    counter++;
    String temp = getStringForDisplay(counter);
    message.setText(String.format("You touched the droid %s", temp));
    }
    
    public String getStringForDisplay(int count) {
    String temp;
    switch(count)
    {
    case 1:
    temp = "once";
    break;
    case 2:
    temp = "twice";
    break;
    default:
    temp = String.format("%d times", count);
    }
    return temp;
    }

该 getStringForDisplay 方法现在更容易测试,并且该 TapDroid 方法的主体已经大大简化。

2.创建一个测试模块

现在让我们创建一个新的测试模块并设置 HelloDroid 为测试模块。这可确保测试模块在包含要测试的源代码的模块上保存一个引用。

  1. 从主菜单中,选择:文件| 新增| 模块(File | New | Module)来启动“新建模块向导(New Module wizard)”。
  2. 在向导的第一页上,在左窗格中选择 Android,然后在右侧选择 Test Module:
    IntelliJ IDEA创建单元测试
  3. 在第二页上,指定新的模块名称,例如 Tests。保持其他字段不变。该 HelloDroid 模块被自动指定为测试模块,因为在这一点上,这是该项目中唯一的模块。
    IntelliJ IDEA创建单元测试

一个新节点将被添加到名为 Tests 的项目中。这个模块有它自己的 manifest 文件和和 src 目录。该 manifest 文件链接到 android.test 库以构建测试类。

IntelliJ IDEA创建单元测试

新创建的模块具有在 src 文件夹中命名的 HelloDroidTest 测试文件。您可以通过添加更多的 Java 类来添加更多的测试文件,如下所示:

public class HelloDroidTest extends ActivityInstrumentationTestCase2<HelloDroid> {

public HelloDroidTest() {
super("com.example.HelloDroid", HelloDroid.class);
}
}

测试类继承自 ActivityInstrumentationTestCase2<T>,其中 T 就是你要测试的活动的名称。

请注意,添加构造函数是必需的,因为没有为父类定义默认构造函数。

3.添加一个测试方法

在编辑器中,右键单击 HelloDroid 测试类并单击“生成(Generate)”(或者单击 Alt+Insert)。在打开的弹出菜单中,选择“测试方法(Test Method)”:

IntelliJ IDEA创建单元测试

IntelliJ IDEA 创建一个名为 testName 的新的方法存根,您可以轻松地将 Name 后缀更改为上下文中更有意义的内容:

IntelliJ IDEA创建单元测试

如果您使用 JUnit 3(Android 中的默认测试框架),则方法名称中 test 的前缀是必需的;使用 JUnit 4,您必须使用方法名称注释来指示给定的方法必须作为测试方法进行处理。

4.编写测试方法的逻辑

在内部,测试方法首先获取对其正在尝试测试的活动的引用,然后调用目标方法,最后将有效结果与预期结果进行比较。

将下面的代码添加到测试方法中:

public void testStringForDisplay() throws Exception {
int count = 1;
HelloDroid activity = getActivity();
String result = activity.getStringForDisplay(count);
Assert.assertEquals(result, "once");

}

断言是通过 JUnit 框架的服务实现的,需要在源文件中正确引用。当意图动作弹出来引用它时按下 Alt+Enter:

IntelliJ IDEA创建单元测试

5.为测试创建一个运行/调试配置

为了运行测试,您需要创建专用的运行/调试配置。设置测试模块时会自动为您创建默认配置。

要编辑其设置,请在主菜单中选择:运行| 编辑配置(Run | Edit Configurations)并在左侧窗格中选择:“Android测试(Android Tests)”下的“测试(Tests)”:

IntelliJ IDEA创建单元测试

您可以选择在模块中运行所有测试,也可以将测试限制为给定类中的方法。

6.运行测试

要运行测试,请确保在编辑器右上角的下拉列表中选择适当的运行/调试配置,然后单击其旁边的运行按钮

IntelliJ IDEA创建单元测试

测试结果显示在自动激活的“运行(Run)”工具窗口的 Test Runner 标签中。如果测试成功完成,则编辑器右上角会出现一个绿色方形图标。如果有警告,图标是黄色的;如果测试失败,则是红色的。您可以点击图标获取更多详细信息。

您可以通过单击 “测试(Tests)”选项卡工具栏中的“导出测试结果(Export Test Results)”图标 ,将测试报告导出为各种格式。