Android单元测试之google官例CalculatorTest
执行测试用例类CalculatorTest
![](https://img2018.cnblogs.com/blog/1707603/201908/1707603-20190813101213892-168589146.png)
设置genymotion可见:
Android Studio界面中,依次单击菜单项 View >Toolbar。即可见改工具按钮。
启动genymotion模拟器Google nexus5 :
Android Studio界面中,工具栏中单击粉色GenymotionDevice Manager工具图标按钮。
在弹出的Genymotion Device Manager窗口中,选中Google nexus5 ,单击【Start】。
关闭Genymotion Device Manager窗口。
![](https://img2018.cnblogs.com/blog/1707603/201908/1707603-20190813103601189-689928078.png)
执行测试用例CalculatorTest
弹出Select Deployment Target窗口,选中Genymotion模拟器,单击【OK】。
![](https://img2018.cnblogs.com/blog/1707603/201908/1707603-20190813104529130-353462516.png)
6条测试用例均执行成功。
![](https://img2018.cnblogs.com/blog/1707603/201908/1707603-20190813104604270-1988707539.png)
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中的常用注解:
![](https://img2018.cnblogs.com/blog/1707603/201908/1707603-20190813104748263-393939064.png)
其他注解详见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");
}
}
测试用例执行结果如下所示:
![](https://img2018.cnblogs.com/blog/1707603/201908/1707603-20190813104834857-2098311896.png)
可见:
(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));
}
![](https://img2018.cnblogs.com/blog/1707603/201908/1707603-20190813105010824-1958629793.png)
从运行结果Logcat日志可见:
括号里面表明当这个方法抛出IllegalArgumentException时测试成功。
这种方式看起来要简洁多了,但是无法检查异常中的消息。
方法二:ExpectedExceptionrule
单元测试用例:35除以0,设置预期异常类以及异常信息
![](https://img2018.cnblogs.com/blog/1707603/201908/1707603-20190813105022098-1053774467.png)
@Rule
public ExpectedException exception =ExpectedException.none();
@Test
public void divDivideByZeroThrows_test03(){
exception.expect(IllegalArgumentException.class);
exception.expectMessage("zero1");
mCalculator.div(35d,0d);
}
![](https://img2018.cnblogs.com/blog/1707603/201908/1707603-20190813105047070-387207998.png)
从运行结果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)软件开发工具包.被软件开发工程师用于为特定的软件包.软件框架.硬件平台. ...
随机推荐
- vue中html、js、vue文件之间的简单引用与关系
有关vue文件记录:index.html在html中运用组件 <body> <app></app> <!-- 此处app的组件为入口js main.js中定义 ...
- python 学习笔记(二):为元组的每个元素命名,提高程序的可读性
在程序中有些数据为固定格式时,即字段数量确定.字段位置顺序确定不变,我们就可以用元组来储存.使用元组的优势是储存空间很小,访问速度也很快.如下代码对每个学生信息用元组来表示: # ('Jim', 16 ...
- configmap使用-完整的configmap文档
转发 https://www.jianshu.com/p/cf3e2218f283 转发 https://www.kubernetes.org.cn/3138.html 注意:configmap不用也 ...
- logging.basicConfig函数各参数:
import logging logging.basicConfig(level=logging.DEBUG, format='%(asctime)s %(filename)s[line:%(line ...
- spring-boot集成1:起步
Why spring-boot? 1. 创建独立的Spring应用程序 2. 嵌入的Tomcat,Jetty和Undertow,无需部署WAR文件 3. 通过starter依赖,简化Maven配置 4 ...
- 大容量类Redis存储--Pika介绍
嘉宾介绍 大家好,首先自我介绍一下,我是360 web平台-基础架构组的宋昭,负责大容量类redis存储pika的和分布式存储Bada的开发工作,这是我的github和博客地址,平时欢迎指正交流^^ ...
- 6-2 shell编程基础
shell编程基础 编程基础 Linus:Talk is cheap, show me the code 程序和编程风格 程序: 程序:算法+数据结构 数据:是程序的核心 算法:处理数据的方式 数据结 ...
- Android开发 互相调用模式之导出Aar包、扩展MainActivity、Java主导
现在官方推荐使用这种方式 在讲导出Aar之前,先讲一下怎么设置图标,先把原xml中图标设置这句话复制过来 刚刚复制过来的时候这句话是红色报错的,这个时候我们把原res下的mipmap复制过来,也可以自 ...
- DDOS常见攻击类型和防御措施
DDOS 攻击类型: SYN Flood 攻击 ACK Flood 攻击 UDP Flood 攻击 ICMP Flood 攻击 Connection Flood 攻击 HTTP Get 攻击 UDP ...
- Elasticsearch-数组和多字段
ES-数组和多字段 当需要在同一个字段中需要拥有多个值时,就会用到数组. 数组 如果要索引拥有多个值的字段,将这些值放入方括号中即可.在music索引下的album类型中,添加songs字段,存储专辑 ...