zoukankan      html  css  js  c++  java
  • 单元测试断言利器 AssertJ

     

    前言

        由于JUnit的Assert是公认的烂API,所以不推荐使用,目前推荐使用的是AssertJ。

    AssertJ网站: http://joel-costigliola.github.io/assertj/

    github上examples 地址 https://github.com/joel-costigliola/assertj-examples

    附件中assertj-examples-octo-assertj-core-1.5.0是官方examples

    整理一些常用的例子如下

    对字符串断言

    Java代码  
    1. @Test  
    2. public void testString() {  
    3.     String str = null;  
    4.     // 断言null或为空字符串  
    5.     assertThat(str).isNullOrEmpty();  
    6.     // 断言空字符串  
    7.     assertThat("").isEmpty();  
    8.     // 断言字符串相等 断言忽略大小写判断字符串相等  
    9.     assertThat("Frodo").isEqualTo("Frodo").isEqualToIgnoringCase("frodo");  
    10.     // 断言开始字符串 结束字符穿 字符串长度  
    11.     assertThat("Frodo").startsWith("Fro").endsWith("do").hasSize(5);  
    12.     // 断言包含字符串 不包含字符串  
    13.     assertThat("Frodo").contains("rod").doesNotContain("fro");  
    14.     // 断言字符串只出现过一次  
    15.     assertThat("Frodo").containsOnlyOnce("do");  
    16.     // 判断正则匹配  
    17.     assertThat("Frodo").matches("..o.o").doesNotMatch(".*d");  
    18. }  

    对数字断言

    Java代码  
    1. @Test  
    2. public void testNumber() {  
    3.     Integer num = null;  
    4.     // 断言空  
    5.     assertThat(num).isNull();  
    6.     // 断言相等  
    7.     assertThat(42).isEqualTo(42);  
    8.     // 断言大于 大于等于  
    9.     assertThat(42).isGreaterThan(38).isGreaterThanOrEqualTo(38);  
    10.     // 断言小于 小于等于  
    11.     assertThat(42).isLessThan(58).isLessThanOrEqualTo(58);  
    12.     // 断言0  
    13.     assertThat(0).isZero();  
    14.     // 断言正数 非负数  
    15.     assertThat(1).isPositive().isNotNegative();  
    16.     // 断言负数 非正数  
    17.     assertThat(-1).isNegative().isNotPositive();  
    18. }  

     对日期断言

    Java代码  
    1. @Test  
    2.     public void testDate() {  
    3.         // 断言与指定日期相同 不相同 在指定日期之后 在指定日期之钱  
    4.         assertThat(Dates.parse("2014-02-01")).isEqualTo("2014-02-01").isNotEqualTo("2014-01-01")  
    5.                 .isAfter("2014-01-01").isBefore(parse("2014-03-01"));  
    6.         // 断言 2014 在指定年份之前 在指定年份之后  
    7.         assertThat(DateTime.now().toDate()).isBeforeYear(2020).isAfterYear(2013);  
    8.         // 断言时间再指定范围内 不在指定范围内  
    9.         assertThat(parse("2014-02-01")).isBetween("2014-01-01", "2014-03-01").isNotBetween(  
    10.                 parse("2014-02-02"), parse("2014-02-28"));  
    11.   
    12.         // 断言两时间相差100毫秒  
    13.         Date d1 = new Date();  
    14.         Date d2 = new Date(d1.getTime() + 100);  
    15.         assertThat(d1).isCloseTo(d2, 100);  
    16.   
    17.         // sets dates differing more and more from date1  
    18.         Date date1 = Dates.parseDatetimeWithMs("2003-01-01T01:00:00.000");  
    19.         Date date2 = parseDatetimeWithMs("2003-01-01T01:00:00.555");  
    20.         Date date3 = parseDatetimeWithMs("2003-01-01T01:00:55.555");  
    21.         Date date4 = parseDatetimeWithMs("2003-01-01T01:55:55.555");  
    22.         Date date5 = parseDatetimeWithMs("2003-01-01T05:55:55.555");  
    23.   
    24.         // 断言 日期忽略毫秒,与给定的日期相等  
    25.         assertThat(date1).isEqualToIgnoringMillis(date2);  
    26.         // 断言 日期与给定的日期具有相同的年月日时分秒  
    27.         assertThat(date1).isInSameSecondAs(date2);  
    28.         // 断言 日期忽略秒,与给定的日期时间相等  
    29.         assertThat(date1).isEqualToIgnoringSeconds(date3);  
    30.         // 断言 日期与给定的日期具有相同的年月日时分  
    31.         assertThat(date1).isInSameMinuteAs(date3);  
    32.         // 断言 日期忽略分,与给定的日期时间相等  
    33.         assertThat(date1).isEqualToIgnoringMinutes(date4);  
    34.         // 断言 日期与给定的日期具有相同的年月日时  
    35.         assertThat(date1).isInSameHourAs(date4);  
    36.         // 断言 日期忽略小时,与给定的日期时间相等  
    37.         assertThat(date1).isEqualToIgnoringHours(date5);  
    38.         // 断言 日期与给定的日期具有相同的年月日  
    39.         assertThat(date1).isInSameDayAs(date5);  
    40.     }  

    对List断言

    Java代码  
    1. @Test  
    2. public void testList() {  
    3.     // 断言 列表是空的  
    4.     assertThat(newArrayList()).isEmpty();  
    5.     // 断言 列表的开始 结束元素  
    6.     assertThat(newArrayList(1, 2, 3)).startsWith(1).endsWith(3);  
    7.     // 断言 列表包含元素 并且是排序的  
    8.     assertThat(newArrayList(1, 2, 3)).contains(1, atIndex(0)).contains(2, atIndex(1)).contains(3)  
    9.             .isSorted();  
    10.     // 断言 被包含与给定列表  
    11.     assertThat(newArrayList(3, 1, 2)).isSubsetOf(newArrayList(1, 2, 3, 4));  
    12.     // 断言 存在唯一元素  
    13.     assertThat(Lists.newArrayList("a", "b", "c")).containsOnlyOnce("a");  
    14. }  

    对Map断言

    Java代码  
    1. @Test  
    2. public void testMap() {  
    3.     Map<String, Object> foo = Maps.newHashMap();  
    4.     foo.put("A", 1);  
    5.     foo.put("B", 2);  
    6.     foo.put("C", 3);  
    7.   
    8.     // 断言 map 不为空 size  
    9.     assertThat(foo).isNotEmpty().hasSize(3);  
    10.     // 断言 map 包含元素  
    11.     assertThat(foo).contains(entry("A", 1), entry("B", 2));  
    12.     // 断言 map 包含key  
    13.     assertThat(foo).containsKeys("A", "B", "C");  
    14.     // 断言 map 包含value  
    15.     assertThat(foo).containsValue(3);  
    16. }  

    对Class断言

    Java代码  
    1. @Test  
    2. public void testClass() {  
    3.     // 断言 是注解  
    4.     assertThat(Magical.class).isAnnotation();  
    5.     // 断言 不是注解  
    6.     assertThat(Ring.class).isNotAnnotation();  
    7.     // 断言 存在注解  
    8.     assertThat(Ring.class).hasAnnotation(Magical.class);  
    9.     // 断言 不是借口  
    10.     assertThat(Ring.class).isNotInterface();  
    11.     // 断言 是否为指定Class实例  
    12.     assertThat("string").isInstanceOf(String.class);  
    13.     // 断言 类是给定类的父类  
    14.     assertThat(Person.class).isAssignableFrom(Employee.class);  
    15. }  
    16.   
    17. @Magical  
    18. public enum Ring {  
    19.     oneRing, vilya, nenya, narya, dwarfRing, manRing;  
    20. }  
    21. @Target(ElementType.TYPE)  
    22. @Retention(RetentionPolicy.RUNTIME)  
    23. public @interface Magical {}  
    24. public class Person {}  
    25. public class Employee extends Person {}  

    使用fail方法

    Java代码  
    1. @Test  
    2. public void testFail() {  
    3.     try {  
    4.         fail("在不检查任何条件的情况下使断言失败。显示一则消息");  
    5.     } catch (AssertionError ae) {  
    6.         logger.info("可以通过catch捕获该Error");  
    7.     }  
    8.     try {  
    9.         failBecauseExceptionWasNotThrown(ServiceException.class);  
    10.     } catch (AssertionError ae) {  
    11.         logger.info("可以通过catch捕获该Error");  
    12.     }  
    13. }  

    除此之外,还提供包括Exception、Iterable、JodaTime、Guava等等很多的断言支持。

  • 相关阅读:
    JavaScript 为字符串添加样式 【每日一段代码80】
    JavaScript replace()方法 【每日一段代码83】
    JavaScript for in 遍历数组 【每日一段代码89】
    JavaScript 创建用于对象的模板【每日一段代码78】
    html5 css3 新元素简单页面布局
    JavaScript Array() 数组 【每日一段代码88】
    JavaScript toUTCString() 方法 【每日一段代码86】
    位运算
    POJ 3259 Wormholes
    POJ 3169 Layout
  • 原文地址:https://www.cnblogs.com/d-d-w/p/9687184.html
Copyright © 2011-2022 走看看