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的更多相关文章

  1. AssertJ断言系列-----------<数据库断言三>

    其实,是有很多种数据断言的使用.那么,我们在接口的测试中,到底应不应该加上数据库断言呢?我的观点是,视情况而定:某一些特殊的场景或者特殊的业务,那么我们就一定要加上数据库断言.不是我们测试人员,不相信 ...

  2. AssertJ断言系列-----------<数据库断言二>

    那么,在实际的接口测试中,我们除了要断言响应的数据正确之外,可能有的还需要断言数据层是否数据真的有入库. assertj db是可以直接对数据库进行断言和操作的. 一.创建一个students表 CR ...

  3. AssertJ断言系列<一>

    1 - Get AssertJ Core assertions Maven的pom.xml加入如下配置: <dependency> <groupId>org.assertj&l ...

  4. 流式断言器AssertJ介绍

    本文来自网易云社区 作者:范旭斐 大家在使用testng.junit做自动化测试的过程中,经常会用到testng.junit自带的断言器,有时候对一个字符串.日期.列表进行断言很麻烦,需要借助到jdk ...

  5. JUnit 单元测试断言推荐 AssertJ

    文章转自:http://sgq0085.iteye.com/blog/2030609 前言 由于JUnit的Assert是公认的烂API,所以不推荐使用,目前推荐使用的是AssertJ. Assert ...

  6. 玩转spring boot——快速开始

    开发环境: IED环境:Eclipse JDK版本:1.8 maven版本:3.3.9 一.创建一个spring boot的mcv web应用程序 打开Eclipse,新建Maven项目 选择quic ...

  7. 「译」JUnit 5 系列:环境搭建

    原文地址:http://blog.codefx.org/libraries/junit-5-setup/ 原文日期:15, Feb, 2016 译文首发:Linesh 的博客:环境搭建 我的 Gith ...

  8. spring boot1

    spring boot 玩转spring boot--快速开始   开发环境: IED环境:Eclipse JDK版本:1.8 maven版本:3.3.9 一.创建一个spring boot的mcv ...

  9. Java资源大全中文版(Awesome最新版)

    Awesome系列的Java资源整理.awesome-java 就是akullpp发起维护的Java资源列表,内容包括:构建工具.数据库.框架.模板.安全.代码分析.日志.第三方库.书籍.Java 站 ...

随机推荐

  1. LeetCode之“数学”:Reverse Integer && Reverse Bits

    1. Reverse Integer 题目链接 题目要求: Reverse digits of an integer. Example1: x = 123, return 321 Example2:  ...

  2. 收集一些dos网络配置命令,从新获取ip刷新dns

    今天台式机插着无线网卡连接学校无线网,结果就要登录了,完后ip地址固定半天,换了mac地址重新分配还是不能改,ping了主机也不通,我想可能是dns没有刷新.现在收集几个dos命令用来配置网络: 1. ...

  3. redis持久化AOF与RDB配置

    AOF保存的数据方案时最完整的,如果同时开启了rdb和aof下,会采用aof方式. (1)设置数据保存到数据文件中的save规则 save 900 1     #900秒时间,至少有一条数据更新,则保 ...

  4. objective-c中的method swizz实现"猴打补丁"

    ruby中的猴打补丁很好实现,下面给出例子: class String alias :org_upcase :upcase def upcase puts("trace me if you ...

  5. unity 代码C#封装为dll

    1  Visual studio软件打开后创建一个项目 2并选择类库类型 3编写简单的代码看看效果(发现会报错),主要是没有添加类库,以及using UnityEngine;引用空间 4添加类库,引用 ...

  6. int类型被强制转换成较低精度的byte类型

    公司的项目上线之前会进行代码合规性检查,其中很容易违反的一个规则就是“不要把原始类型转换成较低的精度”,实际开发的过程中,很多方法在处理数据时,尤其在做移位操作的时候,难免要把int类型转换成byte ...

  7. struts 开发流程

  8. C语言关键字register、extern、static、一些总结,及项目中使用的心得

    首先介绍两个概念: 一.变量的生存周期: 变量从建立到撤销的时间段成变量的生存周期.静态变量,从变量产生到整个程序执行结束.当函数使用变量结束后,变量的存储空间依然存在,变量的值也会随着函数的对其的使 ...

  9. 洛谷P1919 【模板】A*B Problem升级版 题解(FFT的第一次实战)

    洛谷P1919 [模板]A*B Problem升级版(FFT快速傅里叶) 刚学了FFT,我们来刷一道模板题. 题目描述 给定两个长度为 n 的两个十进制数,求它们的乘积. n<=100000 如 ...

  10. How to change from default to alternative Python version on Debian Linux

    https://linuxconfig.org/how-to-change-from-default-to-alternative-python-version-on-debian-linux You ...