AssertJ
import com.tangcheng.learning.test.assertj.AssertJEmployee;
import com.tangcheng.learning.test.assertj.AssertJPerson;
import com.tangcheng.learning.test.assertj.AssertJRing;
import com.tangcheng.learning.test.assertj.Magical;
import lombok.extern.slf4j.Slf4j;
import org.joda.time.LocalDate;
import org.joda.time.LocalDateTime;
import org.junit.Test; import java.util.Collections;
import java.util.Date;
import java.util.HashMap; import static com.google.common.collect.Maps.newHashMap;
import static org.assertj.core.api.Assertions.*;
import static org.assertj.core.util.DateUtil.parse;
import static org.assertj.core.util.DateUtil.parseDatetimeWithMs;
import static org.assertj.core.util.Lists.newArrayList; /**
* https://github.com/joel-costigliola/assertj-core
* https://github.com/joel-costigliola/assertj-core.git
* https://github.com/joel-costigliola/assertj-examples
* https://github.com/joel-costigliola/assertj-examples.git
*
* @author tangcheng
* 2017/11/30
*/
@Slf4j
public class AssertjTest { @Test
public void testString() {
String str = null;
assertThat(str).isNullOrEmpty();
str = "";
assertThat(str).isEmpty();
str = "Frodo";
assertThat(str).isEqualTo("Frodo").isEqualToIgnoringCase("frodo");
assertThat(str).startsWith("Fro").endsWith("do").hasSize(5);
assertThat(str).contains("ro").doesNotContain("or");
assertThat(str).containsOnlyOnce("odo");
assertThat(str).matches("..o.o").doesNotContain(".*d");
} @Test
public void TestNumber() {
Integer num = null;
assertThat(num).isNull();
num = 42;
assertThat(num).isEqualTo(42);
assertThat(num).isGreaterThan(38).isGreaterThanOrEqualTo(39);
assertThat(num).isLessThan(58).isLessThanOrEqualTo(50);
assertThat(num).isNotZero();
assertThat(0).isZero();
assertThat(num).isPositive().isNotNegative();
assertThat(-1).isNegative().isNotPositive();
} @Test
public void testDate() {
assertThat(parse("2017-11-30"))
.isEqualTo("2017-11-30")
.isNotEqualTo("2017-11-29")
.isAfter("2017-11-28")
.isBefore(parse("2017-12-1")); assertThat(LocalDate.now().toDate())
.isBefore(LocalDate.now().plusYears(1).toDate())
.isAfter(LocalDate.now().minusYears(1).toDate()); assertThat(parse("2017-11-30"))
.isBetween("2017-11-1", "2017-12-1")
.isNotBetween(parse("2017-12-1"), parse("2018-12-1")); assertThat(LocalDateTime.now().toDate())
.isCloseTo(LocalDateTime.now().plusMillis(100).toDate(), 100)
.isCloseTo(LocalDateTime.now().plusMillis(100).toDate(), 200)
.isCloseTo(LocalDateTime.now().minusMillis(100).toDate(), 100)
.isCloseTo(LocalDateTime.now().minusMillis(100).toDate(), 500); Date actual = parseDatetimeWithMs("2017-11-30T01:00:00.000"); Date date2 = parseDatetimeWithMs("2017-11-30T01:00:00.555");
assertThat(actual).isEqualToIgnoringMillis(date2);
assertThat(actual).isInSameSecondAs(date2); Date date3 = parseDatetimeWithMs("2017-11-30T01:00:55.555");
assertThat(actual).isEqualToIgnoringSeconds(date3);
assertThat(actual).isInSameMinuteAs(date3); Date date4 = parseDatetimeWithMs("2017-11-30T01:55:55.555");
assertThat(actual).isEqualToIgnoringMinutes(date4);
assertThat(actual).isInSameHourAs(date4); Date date5 = parseDatetimeWithMs("2017-11-30T05:55:55.555");
assertThat(actual).isEqualToIgnoringHours(date5);
assertThat(actual).isInSameDayAs(date5);
} @Test
public void testList() {
assertThat(Collections.EMPTY_LIST).isEmpty();
assertThat(newArrayList()).isEmpty();
assertThat(newArrayList(1, 2, 3)).startsWith(1).endsWith(3);
assertThat(newArrayList(1, 2, 3)).contains(1, atIndex(0))
.contains(2, atIndex(1))
.contains(3, atIndex(2))
.isSorted();
assertThat(newArrayList(3, 1, 2)).isSubsetOf(newArrayList(1, 2, 3, 4));
assertThat(newArrayList("a", "b", "c")).containsOnlyOnce("a");
} @Test
public void testMap() {
HashMap<String, Object> foo = newHashMap();
foo.put("A", 1);
foo.put("B", 2);
foo.put("C", 3); assertThat(foo).isNotEmpty().hasSize(3);
assertThat(foo).contains(entry("A", 1), entry("B", 2));
assertThat(foo).containsKeys("A", "C");
assertThat(foo).containsValues(3, 1);
} @Test
public void testClass() {
assertThat(Magical.class).isAnnotation();
assertThat(AssertJRing.class).isNotAnnotation();
assertThat(AssertJRing.class).hasAnnotation(Magical.class);
assertThat(AssertJRing.class).isNotInterface();
assertThat("string").isInstanceOf(String.class);
assertThat(AssertJPerson.class).isAssignableFrom(AssertJEmployee.class);
} @Test
public void testFail() {
/**
*除此之外,还提供包括Exception、Iterable、JodaTime、Guava等等很多的断言支持。
*/
try {
fail("在不检查任何条件的情况下使断言失败。显示一则消息");
} catch (AssertionError e) {
log.warn("可以通过catch捕获该Error");
} try {
failBecauseExceptionWasNotThrown(IllegalArgumentException.class);
} catch (AssertionError e) {
log.warn("可以通过catch捕获该Error");
}
} }
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target; /**
* @author tangcheng
* 2017/11/30
*/
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface Magical {
}
/**
* @author tangcheng
* 2017/11/30
*/
@Magical
public enum AssertJRing {
oneRing,
vilya,
nenya,
narya,
dwarfRing,
manRing;
}
/**
* @author tangcheng
* 2017/11/30
*/
public class AssertJPerson {
}
/**
* @author tangcheng
* 2017/11/30
*/
public class AssertJEmployee extends AssertJPerson {
}
One minute starting guide http://joel-costigliola.github.io/assertj/assertj-core-quick-start.html
AssertJ assertions for Joda-Time http://joel-costigliola.github.io/assertj/assertj-joda-time.html#quickstart
AssertJ Guava assertions http://joel-costigliola.github.io/assertj/assertj-guava.html#quickstart
AssertJ的更多相关文章
- AssertJ断言系列-----------<数据库断言三>
其实,是有很多种数据断言的使用.那么,我们在接口的测试中,到底应不应该加上数据库断言呢?我的观点是,视情况而定:某一些特殊的场景或者特殊的业务,那么我们就一定要加上数据库断言.不是我们测试人员,不相信 ...
- AssertJ断言系列-----------<数据库断言二>
那么,在实际的接口测试中,我们除了要断言响应的数据正确之外,可能有的还需要断言数据层是否数据真的有入库. assertj db是可以直接对数据库进行断言和操作的. 一.创建一个students表 CR ...
- AssertJ断言系列<一>
1 - Get AssertJ Core assertions Maven的pom.xml加入如下配置: <dependency> <groupId>org.assertj&l ...
- 流式断言器AssertJ介绍
本文来自网易云社区 作者:范旭斐 大家在使用testng.junit做自动化测试的过程中,经常会用到testng.junit自带的断言器,有时候对一个字符串.日期.列表进行断言很麻烦,需要借助到jdk ...
- JUnit 单元测试断言推荐 AssertJ
文章转自:http://sgq0085.iteye.com/blog/2030609 前言 由于JUnit的Assert是公认的烂API,所以不推荐使用,目前推荐使用的是AssertJ. Assert ...
- 玩转spring boot——快速开始
开发环境: IED环境:Eclipse JDK版本:1.8 maven版本:3.3.9 一.创建一个spring boot的mcv web应用程序 打开Eclipse,新建Maven项目 选择quic ...
- 「译」JUnit 5 系列:环境搭建
原文地址:http://blog.codefx.org/libraries/junit-5-setup/ 原文日期:15, Feb, 2016 译文首发:Linesh 的博客:环境搭建 我的 Gith ...
- spring boot1
spring boot 玩转spring boot--快速开始 开发环境: IED环境:Eclipse JDK版本:1.8 maven版本:3.3.9 一.创建一个spring boot的mcv ...
- Java资源大全中文版(Awesome最新版)
Awesome系列的Java资源整理.awesome-java 就是akullpp发起维护的Java资源列表,内容包括:构建工具.数据库.框架.模板.安全.代码分析.日志.第三方库.书籍.Java 站 ...
随机推荐
- Learning ROS for Robotics Programming Second Edition学习笔记(九) indigo Gazebo rviz slam navigation
中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 书中三维环境gazebo,slam的仿真例子 --$ r ...
- "《算法导论》之‘排序’":线性时间排序
本文参考自一博文与<算法导论>. <算法导论>之前介绍了合并排序.堆排序和快速排序的特点及运行时间.合并排序和堆排序在最坏情况下达到O(nlgn),而快速排序最坏情况下达到O( ...
- github搭建个人网站
1. 注册账号: 地址: https://github.com/ 输入账号.邮箱.密码,然后点击注册按钮. 2. 初始设置 注册完成后,选择Free免费账号完成设置. 2.1 验证邮箱 请打开你的 ...
- web报表工具finereport常用函数的用法总结(数组函数)
ADD2ARRAY ADDARRAY(array,insertArray, start):在数组第start个位置插入insertArray中的所有元素,再返回该数组. 示例: ADDARRAY([3 ...
- Android+struts2+json方式模拟手机登录功能
涉及到的知识点: 1.Struts2框架的搭建(包括Struts2的jSON插件) 2.Android前台访问Web采用HttpClient方式. 3.Android采用JSON的解析. 服务端主要包 ...
- masm的一些常用编译选项
ml命令行选项: /Dsymbol[=value] 定义给定名称的文本宏 /Fl 生成lst文件 /Sn lst文件中关闭符号表 /I 设置include文件的路径 /link 发送给link的连接器 ...
- JS(作用域和闭包)
1.对变量提升的理解 1.变量定义(上下文) 2.函数声明 2.说明 this 几种不同的使用场景 常见用法 1.作为构造函数执行 2.作为对象属性执行 3.作为普通函数执行(this === win ...
- javaScript(4)---数据类型
javaScript(4)---数据类型 第4章 数据类型 学习要点: 1.typeof操作符 2.Undefined类型 3.Null类型 4.Boolean类型 5.Number类型 6.Stri ...
- python中的类机制
一.python中的对象 1.python中对象种类及关系 <type 'type'>:该对象可以成为其他类的类型,python中几乎所有对象都是直接或间接由<type 'type' ...
- 【.NET Core】ASP.NET Core之IdentityServer4(1):快速入门
[.NET Core]ASP.NET Core之IdentityServer4 本文中的IdentityServer4基于上节的jenkins 进行docker自动化部署. 使用了MariaDB,EF ...