IDEA 单元测试创建方法详解(2020.03版本亲测)

IntelliJ IDEA创建单元测试

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

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

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

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

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

打开 HelloDroid 类,并选择 TapDroid 方法中引用显示消息的生成的代码部分:

IntelliJ IDEA创建单元测试

以这种方式重写该 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 为测试模块。这可确保测试模块在包含要测试的源代码的模块上保存一个引用。

从主菜单中,选择:文件| 新增| 模块(File | New | Module)来启动“新建模块向导(New Module wizard)”。

在向导的第一页上,在左窗格中选择 Android,然后在右侧选择 Test Module:

IntelliJ IDEA创建单元测试

在第二页上,指定新的模块名称,例如 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 就是你要测试的活动的名称。

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

3.添加一个测试方法

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

IntelliJ IDEA创建单元测试

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

IntelliJ IDEA创建单元测试

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

4.编写测试方法的逻辑

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

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

IDEA 单元测试创建方法详解(2020.03版本亲测)

扫一扫手机访问