断言神器AssertJ快速入门
来源:互联网 发布:netflix 推荐算法 编辑:程序博客网 时间:2024/05/18 00:40
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添加依赖:
<dependency> <groupId>org.assertj</groupId> <artifactId>assertj-core</artifactId> <!-- use 2.4.1 for Java 7 projects --> <version>2.4.1</version> <!-- <version>3.4.1</version> --> <scope>test</scope></dependency>
在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<String> list = new ArrayList<String>(); 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:<"abc[d]"> but was:<"abc[]">
链式校验.
// isEqualTo 相等, contains包含assertThat("abc").as("校验abc").isEqualTo("abc").contains("d");错误提示:FAILED: testAssertJjava.lang.AssertionError: [校验abc] Expecting: <"abc">to contain: <"d">
null判断
Object object = null;assertThat(object).isNotNull();AILED: testAssertJjava.lang.AssertionError: Expecting actual not to be nullObject 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: testAssertJjava.lang.AssertionError: Expected size:<1> but was:<0> in:<[]>
等等,实在太多了,等你来发掘。
可参见官方wiki: http://joel-costigliola.github.io/assertj/index.html
- 断言神器AssertJ快速入门
- 流式断言器AssertJ入门介绍
- AssertJ断言实例
- 单元测试断言利器 AssertJ
- assertj断言机制记录
- JUnit 单元测试断言推荐 AssertJ
- 神器 BTrace 快速入门
- WEB调试神器:Fiddler快速入门
- Apache Jmeter压力测试神器-快速入门
- 异步任务神器 Celery 快速入门
- 跨浏览器复制神器 ZeroClipboard 2.x快速入门详解
- 跨浏览器复制神器 ZeroClipboard 2.x快速入门详解
- AssertJ摘要
- AssertJ简介
- scala断言专栏--入门
- WEB快速开发神器!!!
- 爱测未来安全-安全测试神器Burpsuite快速入门(一)
- GNU Parallel神器入门
- 第二次人机界面设计
- 静态库和动态库的建立
- ProgressBar 进度条
- Spark-ML-数据获取/处理/准备
- 微信支付提示"当前页面的url未注册"
- 断言神器AssertJ快速入门
- HDU-1856-More is better(并查集 集合最值)
- TCP/IP协议簇
- Linux字符设备驱动——初体验
- Windows noinstall zip 安装MySQL。
- JAVA面试题1
- Spring学习(二)Spring简介
- Django 中引入bootstrap的方法
- CSS3基础