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. Cocos2d-swift V3.x 中的update方法

    在cocos2d V3.x中update方法如果实现,则会被自动调用;不用向早期的版本那样要显式schedule. 但是你还是要显式schedule其他方法或blocks使用node的schedule ...

  2. MongoDB下载安装测试及使用

    1.下载安装 64位:mongodb-win32-x86_64-enterprise-windows-64-2.6.4-signed.msi 余数为1的 db.collection.find({ &q ...

  3. C/C++创建多级目录

    常常需要在非MFC的环境下创建目录,尤其是多级目录,这里写了一个创建多级目录的子函数CreateDir,以后需要就可以直接拿来用了. #include <string> #include ...

  4. Ubuntu14.04安装androidStudio错误解除

    错误1 ubuntu androidStudio :app:mergeDebugResources FAILED 办法: sudo dpkg --add-architecture i386 sudo ...

  5. javascript类和原型学习笔记

    js中类的所有实例对象都从同一个原型对象上继承属性.我们可以自己写一个对象创建的工厂方法来来"模拟"这种继承行为: //inherit()返回一个继承自原型对象p的属性的性对象 / ...

  6. C++——虚函数问题小集

    学习C++ 不可避免地会遇到虚函数的问题,下面几个问题在学习初期或多或少会存在一些疑惑,所以便将其总结了下来. 1.为什么静态成员函数.构造函数不能定义为虚函数? 因为静态成员函数是一个大家共享的一个 ...

  7. linux 下使用 tc 模拟网络延迟和丢包

    1 模拟延迟传输简介 netem 与 tc: netem 是 Linux 2.6 及以上内核版本提供的一个网络模拟功能模块.该功能模块可以用来在性能良好的局域网中,模拟出复杂的互联网传输性能,诸如低带 ...

  8. HP-Socket快速入门:分包、粘包解析

    环境配置 vs2015 windows7 64位 hp-socket 5.0 安装hp-socket 新建控制台项目TelnetServer,打开Nuget管理工具,搜索hp-socket: 安装成功 ...

  9. java程序的内存分配(一)

      首 页 阅览室 馆友 我的图书馆 帐号 java程序的内存分配(一) 收藏  JAVA 文件编译执行与虚拟机(JVM)介绍  Java 虚拟机(JVM)是可运行Java代码的假想计算机.只要根据J ...

  10. .ancestors *效果

    <!DOCTYPE html> <html> <head> <style> .ancestors * {  display: block; border ...