软件测试常见断言,断言神器AssertJ快速入门
本帖已被设为精华帖!,
1.背景
在设计自动化cases时,遵守的核心原则是3A(Arrange-> Actor ->Assert)原则;
断言工具是否强大直接影响到用例的执行效率,本文将介绍一种流式断言神器:AssertJ。
在JAVA cases中常用的断言工具有JUnit自带的Assert,还有hamcrest的assertThat(之前总结过http://blog.csdn.net/neven7/article/details/42489723),这些工具对于AssertJ来说都相形见绌。
2.AssertJ介绍
AseertJ: JAVA 流式断言器,什么是流式,常见的断言器一条断言语句只能对实际值断言一个校验点,而流式断言器,支持一条断言语句对实际值同时断言多个校验点。
AssertJ支持如下模块:
Core:AssertJ core is a Java library that provides a fluent interface for writing assertions.
Assertions generator:Use the Assertion Generator to create assertions specific to your own classes.
Guava:AssertJ assertions for Guava provides assertions for Guava types like Multimap, Table, Optional, Range or ByteSource.
Joda-Time:AssertJ assertions for Joda-Time provides assertions for Joda-Time types like DateTime and LocalDateTime.
DB:AssertJ-DB provides assertions to test data in a database.
Neo4j:Provides assertions for Neo4j 2 or higher.
Swing:AssertJ Swing is a Java library that provides a fluent interface for functional Swing UI testing.
3.AssertJ使用
本文将主要介绍Core下常用的断言方法。
版本要求:
AssertJ major versions depend on different Java versions :
AssertJ 1.x requires Java 6 or higher (suitable for Android)
AssertJ 2.x requires Java 7 or higher (should be suitable for Android - please file an issue if it's not the case)
AssertJ 3.x requires Java 8 or higher (not suitable for Android due to Path assertions)
本文使用JDK7, maven pom.xml添加依赖:
org.assertj
assertj-core
2.4.1
test
在cases中import assertj
import static org.assertj.core.api.Assertions.*;
先介绍一个实例,比较类对象,用到了isEqualToComparingFieldByFieldRecursively,嵌套比较字段值。
package com.weibo.qa.testcase.lab;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.testng.annotations.Test;
import static org.assertj.core.api.Assertions.*;
/**
*
* 两个类对象比较
*
* @author hugang
*
*/
class A {
List list = new ArrayList();
String str;
}
class B {
A aB = new A();
String test;
}
public class AssertJTest {
@Test
public void testAssertJ() {
A a1 = new A();
A a2 = new A();
a1.str = "hello";
a2.str = "hello";
a1.list.add("world");
a2.list.add("world");
B b1 = new B();
B b2 = new B();
b1.test = "b1";
b2.test = "b1";
b1.aB.list = a1.list;
b1.aB.str = a1.str;
b2.aB.list = a2.list;
b2.aB.str = a2.str;
// 不包含 对象类型
assertThat(a1).isEqualToComparingFieldByField(a2);
// 对象类型 只比较引用
// assertThat(b1).isEqualToComparingFieldByField(b2);
// 含有嵌式比较,含有对象类型的字段,再比较对象内的数据
assertThat(b1).isEqualToComparingFieldByFieldRecursively(b2);
}
}
常用的一些用法:
添加错误提示信息: as
assertThat("abc").as("校验abc").isEqualTo("abcd");
错误提示:
org.junit.ComparisonFailure: [校验abc] expected: but was:
链式校验.
// isEqualTo 相等, contains包含
assertThat("abc").as("校验abc").isEqualTo("abc").contains("d");
错误提示:
FAILED: testAssertJ
java.lang.AssertionError: [校验abc]
Expecting:
to contain:
null判断
Object object = null;
assertThat(object).isNotNull();
AILED: testAssertJ
java.lang.AssertionError:
Expecting actual not to be null
Object object = null;
assertThat(object).isNull();
是否在某个范围内
List list = new ArrayList();
assertThat(list).isIn(new ArrayList(), new HashMap());
assertThat(list).isNotIn(new ArrayList(), new HashMap());
java.lang.AssertionError:
Expecting:
not to be in:
大小
List list = new ArrayList();
assertThat(list).hasSize(1);
FAILED: testAssertJ
java.lang.AssertionError:
Expected size:<1> but was:<0> in:
等等,实在太多了,等你来发掘。
可参见官方wiki: http://joel-costigliola.github.io/assertj/index.html
原创文章,作者:华为小猪,如若转载,请注明出处:http://www.stest.com
软件测试常见断言,断言神器AssertJ快速入门相关推荐
- 异步任务神器 Celery 快速入门
简介 在程序运行过程中,要执行一个很久的任务,但是我们又不想主程序被阻塞,常见的方法是多线程.可是当并发量过大时,多线程也会扛不住,必须要用线程池来限制并发个数,而且多线程对共享资源的使用也是很麻烦的 ...
- 高级可视化神器Plotly快速入门
微信公众号:尤而小屋 作者:Peter 编辑:Peter 一文爱上高级可视化神器Plotly 数据可视化已经逐渐发展和深入到我们生活的各个方面,往往遇到数据分析类的工作,借助可视化的方式来呈现我们的数 ...
- python数据可视化神器--pyecharts 快速入门
前言 本文首发于本人公众号[Python编程与实战] 我们都知道python上的一款可视化工具 matplotlib , 但是它是静态的.后来发现了 pyecharts 模块,简直好用到不行,可视化类 ...
- 神器BTrace快速入门
1.使用背景 生产环境系统发生问题时,定位问题需要获取系统运行时的相关数据,如方法参数.返回值.全局变量.堆栈信息等.为了获取这些数据,需要修改代码,将数据输出到日志文件,再发布到生产环境.这种方式, ...
- 异步任务神器 Celery 快速入门教程
https://blog.csdn.net/chenqiuge1984/article/details/80127446
- 0基础如何入门软件测试?10分钟从测试9个阶段带你快速入门【建议细品】
0基础如何快速入门软件测试,本文从测试九个阶段,附带9张各阶段测试路线图带你走进软件测试,废话不多说直接上干货! 一.软件测试视频第一阶段-前置基础知识 1.学习目标: 可掌握的核心能力: 1. 熟悉 ...
- 新手如何快速入门软件测试?你还缺这几样...
新手如何快速入门软件测试? 最简单的方式无非是,找准目标,做好学习路线图,按部就班的学习知识与技术. 但对于行业小白而言,入门时期总是会遇到种种困惑,如: 从事软件测试到底要掌握哪些知识?如何学习和提 ...
- linux批量命令换行,Linux 下的这些高效指令,是你快速入门运维的神器
原标题:Linux 下的这些高效指令,是你快速入门运维的神器 Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户.多任务.支持多线程和多CPU的操作系统.它 ...
- PEP8 python规范神器和jupyter notebook主题更改--Jupyter Notebook 快速入门
PEP8 python规范神器和jupyter notebook主题更改--Jupyter Notebook 快速入门 原文: https://www.cnblogs.com/xxtalhr/p/10 ...
最新文章
- springboot中文文档_登顶 Github 的 Spring Boot 仓库!艿艿写的最肝系列
- 拿高薪的程序员,都学习了什么编程语言?
- layui 行悬停显示工具_Minitab | 工具栏和状态栏
- 一文讲透 Git 底层数据结构和原理
- 微型计算机接口技术常见问题,《微型计算机接口技术及应用》期末考试试卷及问题详解(64页)-原创力文档...
- 学习java很痛苦_Java日期细微的痛苦提醒
- 第四十七期:毕业3年Java程序员,年薪20W,他是如何达到的?
- Linux常出现的面试试题
- 3DTouch - iOS新特性
- 关于前段与后端数据库的连接
- 【金融申请评分卡】数据准备 - 缺失值数据清洗
- 记录最近待学习的内容
- 心情随笔之纸包子假新闻 [2007年7月25日]
- R语言文本分析|利用jiebaR进行分词与词频统计
- poi合并单元格后居中
- IAR开发环境的搭建以及CC2530单片机程序编程实验
- T SNE降维matlab程序,关于t-SNE降维方法
- python制作日历并保存成excel_[python]获取一年日历数据并写入excel表格中
- 均值、均方值、方差、均方差和协方差概念及其物理意义
- WatchGuard Firebox X50硬件防火墙