本帖已被设为精华帖!,

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快速入门相关推荐

  1. 异步任务神器 Celery 快速入门

    简介 在程序运行过程中,要执行一个很久的任务,但是我们又不想主程序被阻塞,常见的方法是多线程.可是当并发量过大时,多线程也会扛不住,必须要用线程池来限制并发个数,而且多线程对共享资源的使用也是很麻烦的 ...

  2. 高级可视化神器Plotly快速入门

    微信公众号:尤而小屋 作者:Peter 编辑:Peter 一文爱上高级可视化神器Plotly 数据可视化已经逐渐发展和深入到我们生活的各个方面,往往遇到数据分析类的工作,借助可视化的方式来呈现我们的数 ...

  3. python数据可视化神器--pyecharts 快速入门

    前言 本文首发于本人公众号[Python编程与实战] 我们都知道python上的一款可视化工具 matplotlib , 但是它是静态的.后来发现了 pyecharts 模块,简直好用到不行,可视化类 ...

  4. 神器BTrace快速入门

    1.使用背景 生产环境系统发生问题时,定位问题需要获取系统运行时的相关数据,如方法参数.返回值.全局变量.堆栈信息等.为了获取这些数据,需要修改代码,将数据输出到日志文件,再发布到生产环境.这种方式, ...

  5. 异步任务神器 Celery 快速入门教程

    https://blog.csdn.net/chenqiuge1984/article/details/80127446

  6. 0基础如何入门软件测试?10分钟从测试9个阶段带你快速入门【建议细品】

    0基础如何快速入门软件测试,本文从测试九个阶段,附带9张各阶段测试路线图带你走进软件测试,废话不多说直接上干货! 一.软件测试视频第一阶段-前置基础知识 1.学习目标: 可掌握的核心能力: 1. 熟悉 ...

  7. 新手如何快速入门软件测试?你还缺这几样...

    新手如何快速入门软件测试? 最简单的方式无非是,找准目标,做好学习路线图,按部就班的学习知识与技术. 但对于行业小白而言,入门时期总是会遇到种种困惑,如: 从事软件测试到底要掌握哪些知识?如何学习和提 ...

  8. linux批量命令换行,Linux 下的这些高效指令,是你快速入门运维的神器

    原标题:Linux 下的这些高效指令,是你快速入门运维的神器 Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户.多任务.支持多线程和多CPU的操作系统.它 ...

  9. PEP8 python规范神器和jupyter notebook主题更改--Jupyter Notebook 快速入门

    PEP8 python规范神器和jupyter notebook主题更改--Jupyter Notebook 快速入门 原文: https://www.cnblogs.com/xxtalhr/p/10 ...

最新文章

  1. springboot中文文档_登顶 Github 的 Spring Boot 仓库!艿艿写的最肝系列
  2. 拿高薪的程序员,都学习了什么编程语言?
  3. layui 行悬停显示工具_Minitab | 工具栏和状态栏
  4. 一文讲透 Git 底层数据结构和原理
  5. 微型计算机接口技术常见问题,《微型计算机接口技术及应用》期末考试试卷及问题详解(64页)-原创力文档...
  6. 学习java很痛苦_Java日期细微的痛苦提醒
  7. 第四十七期:毕业3年Java程序员,年薪20W,他是如何达到的?
  8. Linux常出现的面试试题
  9. 3DTouch - iOS新特性
  10. 关于前段与后端数据库的连接
  11. 【金融申请评分卡】数据准备 - 缺失值数据清洗
  12. 记录最近待学习的内容
  13. 心情随笔之纸包子假新闻 [2007年7月25日]
  14. R语言文本分析|利用jiebaR进行分词与词频统计
  15. poi合并单元格后居中
  16. IAR开发环境的搭建以及CC2530单片机程序编程实验
  17. T SNE降维matlab程序,关于t-SNE降维方法
  18. python制作日历并保存成excel_[python]获取一年日历数据并写入excel表格中
  19. 均值、均方值、方差、均方差和协方差概念及其物理意义
  20. WatchGuard Firebox X50硬件防火墙

热门文章

  1. 【javascript】模板字符串
  2. 小笑话_休闲娱乐_1
  3. Canvas Confetti 五彩纸屑特效 JS 插件
  4. 地中海发生两起海难事故 约170名难民死亡或失踪
  5. 微课录制用什么工具好?发现好工具,往往都在不经意间
  6. 35_ue4进阶末日生存游戏开发[背包系统准备]
  7. 线性代数矩阵相关内容总结
  8. 国家开放大学2021春1089现代教育思想答案
  9. Golang常用库学习
  10. 网页上的声音如何在线录制,电脑音频录制软件哪个好 1