JUnit for Android入门2 JUnit断言
JUnit断言
JUnit提供了一些辅助函数,用来帮助我们确定被测试的方法是否按照预期正常运行,这些辅助函数我们称之为断言。
JUnit4所有的断言都在org.junit.Assert类中,Assert类包含一组静态的测试方法,用于验证期望值excepted与实际值actual之间的逻辑关系是否正确,用于验证测试是否通过。
使用是通常在Java代码加入如下import static org.junit.Assert.*
assertEquals([message],excepted,actual)
验证期望值与实际值是否相等,不相等则表示测试未通过,并抛出异常AssertError,message表示自定义错误信息,为可选参数;相等则表示测试通过。示例代码片段: String s1="test"; String s2="test"; assertEquals(s1,s2);
assertNotEquals([message],unexcepted,actual)
验证测试结果值不会是某个值(unexcepted)assertArrayEquals([message],excepteds,actual)
验证两个数组是否相同assertSame([message],excepted,actual)
验证期望对象引用与实际对象引用是否指向同一个对象int s1="test"; int s2="test"; assertSame(s1,s2);//结果pass int[] array1={1,2,3}; int[] array2={1,2,3}; assertSame(array1,array2)//结果fail
assertNotSame([message],excepted,actual)
验证期望对象引用与实际对象引用是否指向不同对象assertNull([message],object)
断言某个对象为nullassertNotNull([message],object)
断言某个对象不为nullasssertTrue([message],condition)
验证条件为真assertFalse([message],condition)
验证条件为假
更为灵活的断言
Hamcrest类库
Hamcrest类库中的核心方法assertThat
- JUnit结合Hamcrest提供了一个全新的断言语法:assertThat,结合Hamcrest提供的匹配符,可以表达全部的测试思想
- 使用gradle引入JUnit4.12时已经包含了hamcrest-core.jar、hamcrest-library.jar、hamcrest-integration这三个包,所以我们无需额外再单独导入hamcrest相关类库。
- 需要加入对hamcrest包的依赖,在app目录下的build.gradle的dependencies下添加如下内容:
testImplementation 'org.hamcrest:hamcrest-library:1.3'
- 字符串相关匹配符:
- startsWith
- endsWith
- containsString
- equalToIgnoringCase
- equalToIgnoringWhiteSpace
- 数值相关匹配符
- closeTo
- greaterThan
- lessThan
- lessThanOrEqualTo
- greaterThanOrEqualTo
- 集合相关匹配符
- hasEntry
- hasKey
- hasValue
- hasItem
- hasItems
- hasItemInArray
- 对象相关匹配符
- notNullValue
- nullValue
- sameInstance
- instanceOf
- hasProperty
- 组合等逻辑匹配符
- allOf
- anyOf
- both
- either
- is
- isA
- not
- any
- anything
//示例: package com.example.myapplication; import org.junit.Test; import static org.hamcrest.MatcherAssert.*; import static org.hamcrest.CoreMatchers.*; import static org.hamcrest.Matchers.equalToIgnoringWhiteSpace; import static org.hamcrest.text.IsEqualIgnoringCase.equalToIgnoringCase;public class TestJUnitLifeCycle {@Testpublic void test3(){assertThat("android studio", startsWith("and"));assertThat("android studio", endsWith("dio"));assertThat("android studio", containsString("android"));assertThat("android studio", equalToIgnoringCase("ANDROID studio"));assertThat("android studio", equalToIgnoringWhiteSpace(" android studio "));} }
JUnit设定方法执行顺序
- 当我们运行一个测试类里所有测试方法时,测试方法的执行顺序并不固定
- JUnit4提供@FixMethodOrder注解来配置执行顺序,其可选值有:
- MethodSorters.NAME_ASCENDING
- MethodSorters.DEFAULT
- MethodSorters.JVM
package com.example.myapplication;import org.junit.FixMethodOrder;
import org.junit.Test;
import org.junit.runners.MethodSorters;
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class TestExecOrder {@Testpublic void testD(){System.out.println("DDDDD");}@Testpublic void testA(){System.out.println("AAAAA");}@Testpublic void testB(){System.out.println("BBBBB");}@Testpublic void testC(){System.out.println("CCCCC");}}
TestRunners
- @RunWith
- 通过@RunWith注解,可以为我们的测试用例选定一个特定的Runner来执行
- 默认的test runner是BlockJUnit4ClassRunner
Suite测试套件
- 如果有三个测试类,使用Suite编写一个TestSuite类,我们可以将3个测试类组合起来一起执行
//测试套件示例
@RunWith(Suite.class)
@Suite.SuiteClasses({TestLogin.class,TestLogout.class,TestUpdate.class
})
public class TestSuite{//不需要有任何实现方法
}
- 测试套件还可以嵌套
@RunWith(Suite.class)
@Suite.SuiteClasses(TestSuite.class)
public class TestSuite2{}
JUnit for Android入门2 JUnit断言相关推荐
- JUnit学习摘要+入门实例 (junit4)
http://www.cnblogs.com/xwdreamer/archive/2012/03/29/2423136.html 1.学习摘要 看<重构-改善既有代码的设计>这本书的时候, ...
- Android下的Junit测试
Android SDK 1.5已经将JUnit包含进来了,用过一次,昨天晚上重新用的时候还出了一点问题,还是决定写一篇比较详细的文章,供大家和自己以后使用,写起来也挺方便的,Android下的Juni ...
- Android中的Junit单元测试
Android中的Junit单元测试 在实际开发中,经常要对已经实现的功能进行单元测试,以保证当前单元没问题,尽可能的减少已有功能的bug 和Java中的开发一样,Android中对单元测试也可以采用 ...
- JUnit单元测试快速入门
目录 单元测试的几个相关概念 工具准备 构建Maven项目 创建JUnit Test Case JUnit4注解.断言等基础知识 JUnit Test Case运行 JUnit Test Suite运 ...
- 小猪的Android入门之路 Day 8 part 3
小猪的Android入门之路 Day 8 part 3 Android网络编程浅析--Android网络数据的下载 --转载请注明出处:coder-pig 本节引言: 我们的应用很多时候都会涉及到网络 ...
- (4)Android入门——android四大组件基础介绍及打电话,发短信简单应用 单元测试
1,本章是android入门最后一篇,从后面开始将进入进阶阶段.我也会加快更新速度.但愿能保持每天三篇博文的数量.但是是在保证质量的前提下.后面我还会发布一些实际开发中用到的应用案例.敬请关注! 应用 ...
- android入门基础笔记,Sqlite数据库下载
* 移动通讯技术的发展: 第一代通讯技术:模拟信号 工作频段 缺点:保密性差 第二代通讯技术: 体积越来越小 数字信号(加密) 短信 彩信 第三代通讯技术: 数字信号 可处理图像.音乐 ...
- android 入门 006(sqlite增删改查)
android 入门 006(sqlite增删改查) package cn.rfvip.feb_14_2_sqlite;import android.content.Context; import a ...
- 【详细】Android入门到放弃篇-YES OR NO-》各种UI组件,布局管理器,单元Activity
问:达叔,你放弃了吗? 答:不,放弃是不可能的,丢了Android,你会心疼吗?如果别人把你丢掉,你是痛苦呢?还是痛苦呢?~ 引导语 有人说,爱上一个人是痛苦的,有人说,喜欢一个人是幸福的. 人与人之 ...
- Android入门(十二)SQLite事务、升级数据库
原文链接:http://www.orlion.ga/610/ 一.事务 SQLite支持事务,看一下Android如何使用事务:比如 Book表中的数据都已经很老了,现在准备全部废弃掉替换成新数据,可 ...
最新文章
- mysql localhost无法登陆_MySQL 'root'@'localhost'无法登录
- windows 安装pycocotools
- UA MATH636 信息论7 并行高斯信道简介
- [高级软件工程教学]团队Beta阶段成绩汇总
- nhibernate之many-to-many的性能
- 【差分隐私入门】差分隐私系统学习记录 (一)
- leetcode题解5-最长回文子串
- 支撑抖音“跳动”数年后,火山引擎新一代视频点播服务正式对外开放
- Eclipse启动参数
- linux root身份执行命令,用root的身份去执行一个命令
- 学会这个方法,轻松为PDF文件加密,快来码住
- 串口485接法图_RS485通讯的正确接线方式介绍
- Matlab plot3显示成平面图像
- feedburner怎么用_新手RSS订阅使用指南
- 关于DNS污染问题的通用解决方案
- 处理System.IO.Ports未能找到类型或命名空间名
- 如何快速删除 Word 文档中的分页符
- 一些造好的轮子-视频下载工具
- 安卓手机测评_2018最全安卓模拟器跑分测评
- TCP系列43—拥塞控制—6、Congestion Window Validation(CWV)