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)
    断言某个对象为null

  • assertNotNull([message],object)
    断言某个对象不为null

  • asssertTrue([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断言相关推荐

  1. JUnit学习摘要+入门实例 (junit4)

    http://www.cnblogs.com/xwdreamer/archive/2012/03/29/2423136.html 1.学习摘要 看<重构-改善既有代码的设计>这本书的时候, ...

  2. Android下的Junit测试

    Android SDK 1.5已经将JUnit包含进来了,用过一次,昨天晚上重新用的时候还出了一点问题,还是决定写一篇比较详细的文章,供大家和自己以后使用,写起来也挺方便的,Android下的Juni ...

  3. Android中的Junit单元测试

    Android中的Junit单元测试 在实际开发中,经常要对已经实现的功能进行单元测试,以保证当前单元没问题,尽可能的减少已有功能的bug 和Java中的开发一样,Android中对单元测试也可以采用 ...

  4. JUnit单元测试快速入门

    目录 单元测试的几个相关概念 工具准备 构建Maven项目 创建JUnit Test Case JUnit4注解.断言等基础知识 JUnit Test Case运行 JUnit Test Suite运 ...

  5. 小猪的Android入门之路 Day 8 part 3

    小猪的Android入门之路 Day 8 part 3 Android网络编程浅析--Android网络数据的下载 --转载请注明出处:coder-pig 本节引言: 我们的应用很多时候都会涉及到网络 ...

  6. (4)Android入门——android四大组件基础介绍及打电话,发短信简单应用 单元测试

    1,本章是android入门最后一篇,从后面开始将进入进阶阶段.我也会加快更新速度.但愿能保持每天三篇博文的数量.但是是在保证质量的前提下.后面我还会发布一些实际开发中用到的应用案例.敬请关注! 应用 ...

  7. android入门基础笔记,Sqlite数据库下载

    * 移动通讯技术的发展: 第一代通讯技术:模拟信号 工作频段   缺点:保密性差 第二代通讯技术: 体积越来越小  数字信号(加密)   短信  彩信 第三代通讯技术: 数字信号   可处理图像.音乐 ...

  8. android 入门 006(sqlite增删改查)

    android 入门 006(sqlite增删改查) package cn.rfvip.feb_14_2_sqlite;import android.content.Context; import a ...

  9. 【详细】Android入门到放弃篇-YES OR NO-》各种UI组件,布局管理器,单元Activity

    问:达叔,你放弃了吗? 答:不,放弃是不可能的,丢了Android,你会心疼吗?如果别人把你丢掉,你是痛苦呢?还是痛苦呢?~ 引导语 有人说,爱上一个人是痛苦的,有人说,喜欢一个人是幸福的. 人与人之 ...

  10. Android入门(十二)SQLite事务、升级数据库

    原文链接:http://www.orlion.ga/610/ 一.事务 SQLite支持事务,看一下Android如何使用事务:比如 Book表中的数据都已经很老了,现在准备全部废弃掉替换成新数据,可 ...

最新文章

  1. mysql localhost无法登陆_MySQL 'root'@'localhost'无法登录
  2. windows 安装pycocotools
  3. UA MATH636 信息论7 并行高斯信道简介
  4. [高级软件工程教学]团队Beta阶段成绩汇总
  5. nhibernate之many-to-many的性能
  6. 【差分隐私入门】差分隐私系统学习记录 (一)
  7. leetcode题解5-最长回文子串
  8. 支撑抖音“跳动”数年后,火山引擎新一代视频点播服务正式对外开放
  9. Eclipse启动参数
  10. linux root身份执行命令,用root的身份去执行一个命令
  11. 学会这个方法,轻松为PDF文件加密,快来码住
  12. 串口485接法图_RS485通讯的正确接线方式介绍
  13. Matlab plot3显示成平面图像
  14. feedburner怎么用_新手RSS订阅使用指南
  15. 关于DNS污染问题的通用解决方案
  16. 处理System.IO.Ports未能找到类型或命名空间名
  17. 如何快速删除 Word 文档中的分页符
  18. 一些造好的轮子-视频下载工具
  19. 安卓手机测评_2018最全安卓模拟器跑分测评
  20. TCP系列43—拥塞控制—6、Congestion Window Validation(CWV)

热门文章

  1. win10+eclipse+hadoop2.6.0 开发环境
  2. 前端:用css打造炫酷3d特效- css3d立方体
  3. Zabbix SNMP配置(学习笔记十九)
  4. MQTT协议(1)-简介
  5. 10条设计师应该知道的字体设置技巧
  6. Centos 5.8 搭建ntp服务器
  7. iOS开发网络篇—GET请求和POST请求(转)
  8. JVM 为什么使用元空间替换了永久代
  9. const和define在值定义上的区别
  10. 所有子线程全部结束的判断