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. SpriteBuilder中频繁的切换场景层的解决办法

    注意,不像SettingsLayer,CCScrollView实例并没有从场景中删除和重新加载像代码所示的那样. 你只是简单的改变其可视(visible)状态on和off. 改变可视状态比加载CCB或 ...

  2. SurfaceView浅析

    什么是SurfaceView呢? 为什么是SurfaceView呢?Surface的意思是表层,表面的意思,那么SurfaceView就是指一个在表层的View对象.为什么 说是在表层呢,这是因为它有 ...

  3. HBase提供的工具

    1 .压缩测试工具   hbase org.apache.hadoop.hbase.util.CompressionTest   1G数据不同的压缩算法得到的结果 +----------------- ...

  4. 【55】java异常机制剖析

    一.为什么要使用异常 首先我们可以明确一点就是异常的处理机制可以确保我们程序的健壮性,提高系统可用率.虽然我们不是特别喜欢看到它,但是我们不能不承认它的地位,作用.有异常就说明程序存在问题,有助于我们 ...

  5. DB Query Analyzer 5.05 is released, 65 articles concerned have been published

    DB Query Analyzer 5.05 is released, 65 articles concerned have been published DB Query Analyzer is p ...

  6. MaterialDesign学习项目

    概述 该项目主要用来学习Material Design Support Library和一些android其他技术,也借鉴了网上一些其他优秀的学习资源.该项目目前主要分为俩大部分(后期可能会有一些增加 ...

  7. C# 压缩PDF图片

    文档中包含图片的话,会使得整个文档比较大,占用存储空间且不利于快速.高效的传输文件.针对一些包含大量高质图片的PDF文档,若是对图片进行压缩,可以有效减少文档的占用空间.并且,在文档传输过程中也可以减 ...

  8. Linux下转换文件从GBK到UTF-8

    iconv -f gbk -t utf- source-file -o target-file

  9. Strom topology 设计的演进

    场景:采集日志数据,日志数据有多个字段组成,需求是根据日志数据中的N个字段(维度),去统计指标数据(个数.平均值)等.

  10. 解决XMind运行卡顿

    问题 XMind是一款很好用的脑图工具,它是基于eclipse开发的,而且基础功能是免费的.最近我安装了XMind 8 Pro,但是发现在Mac上运行有卡顿. 解决方式 解决这个问题的思路也很简单,软 ...