Android单元测试之google官例CalculatorTest
执行测试用例类CalculatorTest

设置genymotion可见:
Android Studio界面中,依次单击菜单项 View >Toolbar。即可见改工具按钮。
启动genymotion模拟器Google nexus5 :
Android Studio界面中,工具栏中单击粉色GenymotionDevice Manager工具图标按钮。
在弹出的Genymotion Device Manager窗口中,选中Google nexus5 ,单击【Start】。
关闭Genymotion Device Manager窗口。

执行测试用例CalculatorTest
弹出Select Deployment Target窗口,选中Genymotion模拟器,单击【OK】。

6条测试用例均执行成功。

1,单元测试:测试用例设计
如下是Calculator类,包含加、减、除、乘4个方法。
如下是CalculatorTest类,它是Calculator类的单元测试类。
设计了6个测试用例方法:
addTwoNumbers()测试用例实现调用Calculator类的add()加法方法;
subTwoNumbers()测试用例实现调用Calculator类的sub()减法方法;
subWorksWithNegativeResult()测试用例实现调用Calculator类的sub()减法方法;
divTwoNumbers()测试用例实现调用Calculator类的div()除法方法;
divDivideByZeroThrows()测试用例实现调用Calculator类的div()除法方法;
mulTwoNumbers()测试用例实现调用Calculator类的div()除法方法。
2,单元测试:常用注解
android junit4单元测试用例类跟普通的java代码编写过程最大的区别之一就是注解。
以下是junit4中的常用注解:

其他注解详见junit4官网:https://junit.org/junit4/
在测试类中这些常用注解的执行顺序是什么呢?
通过AnnotationSequenceTest测试类来验证。
packagecom.example.android.testing.androidjunitrunnersample;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.filters.SmallTest;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
@RunWith(AndroidJUnit4.class)
@SmallTest
public class AnnotationSequenceTest {
@BeforeClass
public static void init(){
System.out.println("annotation @BeforeClass");
}
@Before
public void setUp(){
System.out.println("annotation @Before");
}
@Test
public void test001(){
System.out.println("annotation @Test 1");
}
@Test
public void test002(){
System.out.println("annotation @Test 2");
}
@Ignore
public void test003(){
System.out.println("annotation@Ignore");
}
@After
public void tearDown(){
System.out.println("annotation @After");
}
@AfterClass
public static void end(){
System.out.println("annotation @AfterClass");
}
}
测试用例执行结果如下所示:

可见:
(1)一个JUnit4的单元测试用例执行顺序为:
@BeforeClass -> @Before -> @Test -> @After ->@AfterClass;
(2)每一个测试方法的调用顺序为:
@Before -> @Test -> @After;
(3)@BeforeClass和@AfterClass仅执行一次
测试java方法的验证点:
(1) 返回值
(2) 属性和状态的改变
(3) 操作行为
(4) 异常抛出
3,单元测试:异常检查
方法一:Junitannotation方式
@Test(expected = IllegalArgumentException.class)
public void divDivideByZeroThrows() {
System.out.println("divDivideByZeroThrows***********************************");
mCalculator.div(32d,0d);
System.out.println("divDivideByZeroThrows==========================="+mCalculator.div(32d,0d));
}

从运行结果Logcat日志可见:
括号里面表明当这个方法抛出IllegalArgumentException时测试成功。
这种方式看起来要简洁多了,但是无法检查异常中的消息。
方法二:ExpectedExceptionrule
单元测试用例:35除以0,设置预期异常类以及异常信息

@Rule
public ExpectedException exception =ExpectedException.none();
@Test
public void divDivideByZeroThrows_test03(){
exception.expect(IllegalArgumentException.class);
exception.expectMessage("zero1");
mCalculator.div(35d,0d);
}

从运行结果Logcat日志可见:
在try块中断言失败,报断言失败错误:预期包含“zero1”、但实际抛出的异常字符串是“secondOperand must be != 0, you cannot divide by zero”。
作 者:Testfan 彩虹
出 处:微信公众号:自动化软件测试平台
版权说明:欢迎转载,但必须注明出处,并在文章页面明显位置给出文章链接
Android单元测试之google官例CalculatorTest的更多相关文章
- Android单元测试之二:本地测试
Android单元测试之二:本地测试 本地测试 本地测试( Local tests):只在本地机器 JVM 上运行,以最小化执行时间,这种单元测试不依赖于 Android 框架,或者即使有依赖,也很方 ...
- Android Google官方文档(cn)解析之——Intents and Intent filter
应用程序核心组件中的三个Activity,service,还有broadcast receiver都是通过一个叫做intent的消息激活的.Intent消息传送是在相同或不同的应用程序中的组件之间后运 ...
- Android Google官方文档解析之——Device Compatibility
Android is designed to run on many different types of devices, from phones to tablets and television ...
- 玩转单元测试之Testing Spring MVC Controllers
玩转单元测试之 Testing Spring MVC Controllers 转载注明出处:http://www.cnblogs.com/wade-xu/p/4311657.html The Spri ...
- 玩转单元测试之WireMock -- Web服务模拟器
玩转单元测试之WireMock -- Web服务模拟器 WireMock 是一个灵活的库用于 Web 服务测试,和其他测试工具不同的是,WireMock 创建一个实际的 HTTP服务器来运行你的 We ...
- [转载]单元测试之道(使用NUnit)
首先来看下面几个场景你是否熟悉 1.你正在开发一个系统,你不断地编码-编译-调试-编码-编译-调试……终于,你负责的功能模块从上到下全部完成且编译通过!你长出一口气,怀着激动而又忐忑的心情点击界面上的 ...
- 单元测试之道(使用NUnit)
首先来看下面几个场景你是否熟悉 1.你正在开发一个系统,你不断地编码-编译-调试-编码-编译-调试……终于,你负责的功能模块从上到下全部完成且编译通过!你长出一口气,怀着激动而 又忐忑的心情点击界面上 ...
- 单元测试之Qunit
单元测试之Qunit 前言 因为公司开发了一套javascript SDK需要测试,在网上找了很久,找到了JQuery团队开发的QUnit,和基于JUnit的JsUnit,还有一些还没有看,先讲讲QU ...
- Android自动化测试之环境搭建
Android自动化测试之环境搭建 一.Android-sdk介绍 SDK(Software development kit)软件开发工具包.被软件开发工程师用于为特定的软件包.软件框架.硬件平台. ...
随机推荐
- SQL学习(八)日期处理
不同数据库中,针对日期处理的函数不同 Oracle中常用日期函数 (1.sysdate: 获取当前系统时间 如: select sysdate() ----返回当前时间,包括年月日 时分秒 (2.to ...
- apicloud 顶部状态栏透明方法
api.setStatusBarStyle({ style: 'dark', color:'transparent' });
- 一个好的关于计算文件大小,及使其便于阅读的方法(php)
public function getReadableFileSize($retstring=null){ $sizes = array('byte','kB','MB','GB','TB','PB' ...
- 【Python开发】urllib2异常处理
一.urllib2模块回顾 urllib2模块中最重要的函数是urlopen()函数,用于获取URLs资源(Uniform Resorce Locators).urlopen函数不仅可以用于简单的情况 ...
- MSF魔鬼训练营-3.2.2 操作系统辨识
利用操作系统视频进行社会工程学攻击.例如在探测到目标用户所使用的网络设备.服务器设备厂家型号等信息后.可伪装成相关厂家的技术人员通过电话.邮件等方式与系统管理员取得联系得到信任.NMAP 示例: 使用 ...
- (5.12)mysql高可用系列——复制中的在线切换GTID模式/增加节点/删除节点
目录 [0]需求 前提,已经假设好基于传统异步复制的主库和从库1. [0.1]传统异步切换成基于GTID的无损模式 [0.2]增加特殊要求的从库 [1]操作环境 [2]构建 复制->半同步复制 ...
- 同sql server不同database间的数据访问
虽未经测试,但是应该是登陆名同时具有此2数据库访问权限啦. select * from [basename].dbo.[tablename] done.
- javaScript学习总结(二)——jQuery插件的开发
概要 jQuery插件就是以jQuery库为基础衍生出来的库,jQuery插件的好处是封装功能,提高了代码的复用性,加快了开发速度,现在网络上开源的jQuery插件非常多,随着版本的不停迭代越来越稳定 ...
- java-selenium三种等待方式
方式1: 线程等待:Thread.sleep(xxxx) 只要在case中加入sleep就会强制等待设置的时间后才会执行之后的命令,这种等待一般适用于调试脚本的时候. java代码 //等待3秒 Th ...
- java解析json字符串详解(两种方法)
一.使用JSONObject来解析JSON数据官方提供的,所以不需要导入第三方jar包:直接上代码,如下 private void parseJSONWithJSONObject(String Jso ...