Android studio 单元测试初探

一直想研究一下Android的单元测试,苦于各种懒的借口迟迟未开始。最近查了些资料,动手实践,初步了解了一些单元测试的皮毛,记录下来以备不时之需。

单元测试代码目录

AS新建工程时会自动创建两个单元测试的目录,如下:

src     
 ├── androidTest/java--仪器化单元测试或者UI测试
 ├── main/java--主代码目录
 └── test/java--本地测试,可以通过run命令运行直接在控制台看运行结果

添加单元测试类

1、新建工具类

main目录下新建工具类NumberUtils,代码如下:

public class NumberUtils {
    /**
     * @param psd 密码
     * @return 密码强度是否合法(6-18位,数字和字母)
     */
    public static boolean isStrongPwd(String psd) {
        if (TextUtils.isEmpty(psd)) {
            return false;
        }
        Pattern pattern = Pattern.compile("^(?![a-zA-z]+$)(?!\\d+$)[a-zA-Z\\d]{6,18}$");
        return pattern.matcher(psd).matches();
    }
}

2、新建单元测试类

将光标选中NumberUtils类名,并同时按住alt + enter键,会弹出如下对话框:
Android studio 单元测试初探_第1张图片
选择Create Test,弹出如下对话框:
Android studio 单元测试初探_第2张图片

  • setUp/@Before选项为添加带@Before注解的单元测试方法,这类方法在每个测试之前执行,用于准备测试环境(如: 初始化类,读输入流等),在一个测试类中,每个@Test方法的执行都会触发一次调用。
  • tearDown/@After选项为添加带@After注解的单元测试方法,这类方法在每个测试之后执行,用于清理测试环境数据,在一个测试类中,每个@Test方法的执行都会触发一次调用。
  • Show inherited methods选项表示Member一栏中是否显示父类的方法。勾选则显示父类的方法。

这里都不勾选,直接勾选要测试的方法isStrongPwd,弹出如下对话框:
Android studio 单元测试初探_第3张图片
因为这里是本地化测试,所以选择代码目录为test而非androidTest,点击OK生成对应文件及代码。
在这里插入图片描述
代码如下:

/**
 - 单元测试类
 -  3. @author just
 - @date 2019/5/20
 */
public class NumberUtilsTest {

    @Test
    public void isStrongPwd() {
    }
}

3、添加单元测试代码

在测试方法体中需要用到Junit中的断言方法,这里一种新断言方法assertThatassertThat是junit4出现的新断言方法,可以用于以下匹配:

  • 数值匹配,greaterThan(测试值是否大于特定值)、lessThan(测试值是否小于特定值)、is(测试值是否等于特定值)等等
  • 字符串匹配,containsString(测试变量是否包含指定字符)、startsWith(测试变量是否已指定字符串开头)、equalToIgnoringCase(试变量在忽略大小写的情况下是否等于指定字符串)等等
  • 集合匹配,hasItem(测试集合中是否还有指定元素)
  • Map匹配,hasEntry(测试map中是否还有指定键值对)、hasKey(测试map中是否还有指定键)、hasValue(测试map中是否还有指定值)

这里因为返回值为boolean类型,可以直接用数值匹配中的is方法,代码如下:

    @Test
    public void isStrongPwd() {
        assertThat(NumberUtils.isStrongPwd("qwe123456"), is(true));
        assertThat(NumberUtils.isStrongPwd("w1234"), is(false));
        assertThat(NumberUtils.isStrongPwd("1234567"), is(false));
        assertThat(NumberUtils.isStrongPwd("12345678we34567are890"), is(false));
        assertThat(NumberUtils.isStrongPwd("qwe123456..."), is(false));
    }

4、运行单元测试

  • 运行单个方法,将光标移到对应方法上点击右键,选择Run,如下:
    Android studio 单元测试初探_第4张图片
  • 运行整个单元测试类,选中文件名称,右键选择Run,如下:
    Android studio 单元测试初探_第5张图片
  • 运行整个包,右键点击包名,选择Run Tests in,如下:
    Android studio 单元测试初探_第6张图片

5、查看运行结果

运行完成之后,可直接查看运行结果,如下:
Android studio 单元测试初探_第7张图片
这里显示运行失败,查看原因,是TextUtils.isEmpty方法找不到的原因,因为这是本地运行,所以没有jar依赖,在这里可以在test/java包下添加该类及方法。如下:
Android studio 单元测试初探_第8张图片
然后再运行,等待运行完成。如下:
Android studio 单元测试初探_第9张图片
如果所有用例全部测试通过,才会有如上图的passed结果,若有一个用例测试不通过,结果如下:
Android studio 单元测试初探_第10张图片
可以通过log看到哪一行测试不通过。

6、原有项目添加单元测试方法

新建的项目默认包含单元测试相关的文件夹及包,但若是原有项目中不包含单元测试相关的内容,那么可以直接根据第2个步骤新建单元测试类,选择完成之后,系统会自动添加相关的包及文件夹,gradle中也会添加引用。

你可能感兴趣的:(Android,笔记,android-studio)