Tips3 编写测试用例

这篇博客详细介绍了在Android Studio中编写和运行单元测试用例的过程,强调了在大型项目中编写测试用例的重要性。通过实际操作,演示了如何创建和运行测试用例,以及如何通过单元测试确保代码的健壮性。博客最后提到了使用Kotlin编写测试用例的内容。
摘要由CSDN通过智能技术生成

联系方式:

简书:WillFlow
CSDN:WillFlow
微信公众号:WillFlow

当你google查找AndroidStudio单元测试的时候,有大量的资料教程,但是都不完整,至少跟着教程一步步的是无法看到自己想看的效果的,所以我写了此篇,想尽量完整地向大家展示单元测试的编写过程。

Android Studio 自带的单元测试功能用起来很简单,它不需要修改gradle或者AndroidManifest.xml文件里的内容,直接编写测试用例即可。不过即使是这样,我相信大多数的程序员都还是不喜欢编写测试用例的,因为这是一件很繁琐的事情而且好像显得很多余:明明运行一下程序,观察运行结果就能知道对与错了,为什么还要通过代码来进行判断呢?确实,如果只是普通的一个小程序,编写测试用例是有些多此一举,但是当你正在维护一个非常庞大的工程时,你就会发现编写测试用例是非常有必要的。

举个例子吧!比如你确实正在维护一个很庞大的工程,里面有许许多多数也数不清的功能。某天,你的领导要求你对其中一个功能进行修改,难度也不高,你很快就解决了,并且测试通过。但是几天之后,突然有人发现其他功能出现了问题,最终定位出来的原因竟然就是你之前修改的那个功能所导致的,这下你可就冤死了。

不过千万别以为这是天方夜谭,在大型的项目中,这种情况还是很常见的。由于项目里的很多代码都是公用的,你为了完成一个功能而去修改某行代码,完全有可能因此而导致另一个功能无法正常工作。

所以,当项目比较庞大的时候,一般都应该去编写测试用例的。如果我们给项目的每一项功能都编写了测试用例,每当修改或新增任何功能之后,就将所有的测试用例都跑一遍,只要有任何测试用例没有通过,就说明修改或新增的这个功能影响到现有功能了,这样就可以及早地发现问题,避免事故的出现。

一、目录介绍

目录结构
- mian:项目代码;
- androidTest:编写Android测试用例使用;
- test:编写Java测试用例使用,如果所写的测试代码没有使用android sdk(android.*下的代码),那么可以在test目录下新建测试用例;

二、运行我们的测试用例

Android Studio 本身就是支持Android单元测试的,我用的是 AS2.2.3 版本,它甚至无需像之前的版本那样需要进行繁琐的配置。
Android Studio 2.2.3 版本

(1)编写测试用例

  • 这里我们首先进入到Java的测试类当中:
    Java单元测试类

其中“assertEquals(4, 2 + 2);”是用来断言42+2是否是相等的语句,我们先不做改变。

  • 点击14行左侧的按钮,然后选择第一项运行:
    运行测试用例

  • 这时观察到底部Run面板显示为绿色横条,表示为运行测试成功:
    底部Run面板

然后我们把“assertEquals(4, 2 + 2);”改为“assertEquals(4, 5);”

  • 按照刚才的步骤运行测试用例:
    运行测试用例
    由于 4 和 5 是不相等的,那么断言失败,所以Run面板中显示出红色并表示出了错误的原因。

到这里我们自然就明白了测试用例是什么,测试用例其实就是一段普通的程序代码,通常是带有期望的运行结果的,测试者可以根据最终的运行结果来判断程序是否能正常工作。

那么单元测试又是什么呢?单元测试是指对软件中最小的功能模块进行测试,如果软件的每一个单元都能通过测试,说明代码的健壮性已经非常好了。下面我们就一起来进行一下Android的单元测试。

(2)单元测试

首先在 MainActivity 中编写 androidTest() 方法,该方法用于向集合 testList 中添加不重复的 int 值,并返回此时 testList 的大小:

  • 待测试方法:
    待测试方法

  • 然后在 ExampleInstrumentedTest 测试类中进行断言测试:
    断言测试

  • 此时运行测试用例:
    运行测试用例
    发现没有异常情况抛出,说明测试通过。

不过,现在这个单元测试其实只是覆盖了很少的情况而已,我们应该再编写一些特殊情况下的断言,看看程序是不是仍然能够正常工作。

  • 修改 ExampleInstrumentedTest 中的代码,如下所示:
    特殊情况下的断言

可以看到,这里我们又调用了一次 androidTest() 方法来添加int值到 testList 中,并且添加的仍然还是2。连续添加两次相同int值,这应该算是一种比较特殊的情况了。这时我们觉得 androidTest() 有能力去过滤掉重复的数据,因此在断言的时候认为目前
androidTest() 中的testList大小仍然是 3。

  • 重新运行一遍测试用例,结果如图:
    特殊情况下断言运行结果

很遗憾,测试用例没有通过。从这个测试用例中我们发现, androidTest() 方法中的代码原来是不够健壮的,这个时候就应该对代码进行优化了。

  • 修改 androidTest() 中的代码,如下所示:
    androidTest()修改后
    这里我们在 androidTest()方法中加入了一个 if 判断,只有当集合中不包含传入的int值的时候才会将它添加到集合中,这样就可以解决掉int值重复的 bug 了。

  • 现在重新运行一遍测试用例:
    重新运行测试用例
    你就会发现测试又能成功通过了。

之后你可以不断地补充新的测试用例,并让程序永远都可以跑通所有的测试用例,这样的程序才会更加健壮,出现 bug 的概率也会更小。

在后面的章节中,我们还会介绍如何用 Kotlin 代码编写测试用例,敬请关注!

微信公众号:WillFlow

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值