小丸工具箱官方网站
当你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);”是用来断言4和2+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 了。
现在重新运行一遍测试用例:
重新运行测试用例
你就会发现测试又能成功通过了。
End.
如果对软件测试感兴趣,想了解更多的软件测试知识,请大家关注“51Testing软件测试网”搜狐号。关注下方链接即可免费领取直播课程哦!