Assert 断言常用工具类


 

jdk自带的assert

jdk的内置断言 assert 默认关闭,可以用命令行参数 -ea 启用内置断言,ea即enable assertions。鸡肋,忘记加-ea时断言不起作用,有风险,不推荐此种方式。

 

spring的Assert

不满足时都是抛出 IllegalArgumentException(msg),msg可以用String或Supplier指定

//期待obj为null
Assert.isNull(Object obj, String msg);
Assert.isNull(Object obj, Supplier<String> msg);

//期待不为null
Assert.notNull(Object obj, String msg);
Assert.notNull(Object obj, Supplier<String> msg);



//期待数组|集合不为空
Assert.notEmpty(Object[] arr, String msg);
Assert.notEmpty(Object[] arr, Supplier<String> msg);

//期待数组、集合中没有为null的元素(允许数组、集合自身为null)
Assert.noNullElements(Object[] arr, String msg);
Assert.noNullElements(Object[] arr, Supplier<String> msg);



//期待str不包含指定子串substr,包含时抛出 IllegalArgumentException(msg),msg可以用String或Supplier指定
Assert.doesNotContain(String str, String substr, String msg);
Assert.doesNotContain(String str, String substr, Supplier<String> msg);

//期待str非空(相当于isNotEmpty)
Assert.hasLength(String str, String msg);
Assert.hasLength(String str, Supplier<String> msg);

//期待str有内容(在str非空的基础上,要求字符串有空格之外的字符,相当于isNotBlank)
Assert.hasText(String str, String msg);
Assert.hasText(String str, Supplier<String> msg);



//期待superType是subType的父类(不要求是直接父类)
Assert.isAssignable(Class superType, Class subType);
Assert.isAssignable(Class superType, Class subType, String msg);
Assert.isAssignable(Class superType, Class subType, Supplier<String> msg);

//期待obj是指定类的实例
Assert.isInstanceOf(Class clazz, Object obj);
Assert.isInstanceOf(Class clazz, Object obj, String msg);
Assert.isInstanceOf(Class clazz, Object obj, Supplier<String> msg);



//期待expression为true
Assert.isTrue(boolean expression, String msg);
Assert.isTrue(boolean expression, Supplier<String> msg);

 

junit的Assert

不满足要求时,都是抛出 AssertionError

//期待condition为true|false
Assert.assertTrue(boolean condition);
Assert.assertTrue(String msg, boolean condition);

Assert.assertFalse(boolean condition);
Assert.assertFalse(String msg, boolean condition);



//期待obj为null、非null
Assert.assertNull(Object obj);
Assert.assertNull(String msg, Object obj);

Assert.assertNotNull(Object obj);
Assert.assertNotNull(String msg, Object obj);



//期待2个值相等、不等(直接使用==判断)
Assert.assertSame(Object expected, Object actual);
Assert.assertSame(String message, Object expected, Object actual);

Assert.assertNotSame(Object expected, Object actual);
Assert.assertNotSame(String message, Object expected, Object actual);



//期待同类型的2个值相等、不等。基本类型使用==判断,Object类型使用equals判断
Assert.assertEquals(long expected, long actual);
Assert.assertEquals(String msg, long expected, long actual);

Assert.assertEquals(Object expected, Object actual);
Assert.assertEquals(String message, Object expected, Object actual);

//assertNotEquals用法同上
Assert.assertNotEquals();



//期待同类型的2个数组相等
Assert.assertArrayEquals(int[], int[]);
Assert.assertArrayEquals(String msg, int[], int[]);

Assert.assertArrayEquals(Object[], Object[]);
Assert.assertArrayEquals(String msg, Object[], Object[]);



//期待执行runnable.run()时抛出指定类型的异常,会自动执行runnable.run()
Assert.assertThrows(Class expectedThrowable, ThrowingRunnable runnable);
Assert.assertThrows(String msg, Class expectedThrowable, ThrowingRunnable runnable);

 

common-lang3的Validate

不满足时也是抛异常,可以起到断言作用

//期待非null
Validate.notNull(Object obj);
Validate.notNull(Object obj, String msg, Object... values);

//期待非空,适用于字符串、数组、集合类型,非空指的是 非null + 元素数量>0
Validate.notEmpty(String str);
Validate.notEmpty(String str, String msg, Object... values);

//期待字符串不是blank
Validate.notBlank(String str);
Validate.notBlank(sString str, String msg, Object... values);



//期待不存在为null的元素,适用于数组、集合等可迭代对象
Validate.noNullElements(T[] arr);
//msg中可以使用%s、%d之类的占位符,obj...指定占位符对应的值
Validate.noNullElements(T[] arr, String msg, Object... values);



//期待布尔表达式的值为true
Validate.isTrue(boolean expression);
Validate.isTrue(boolean expression, String msg, Object... values);

//期待布尔表达式是否为true
Validate.validState(boolean expression);
Validate.validState(boolean expression, String msg, Object... values);



//期待obj是指定类的实例
Validate.isInstanceOf(Class clazz, Object obj);
Validate.isInstanceOf(Class clazz, Object obj, String msg, Object... values);

//期待2个Class相同,或第一个是第二个的基类
Validate.isAssignableFrom(Class superClazz,Class clazz);
Validate.isAssignableFrom(Class superClazz,Class clazz, String msg, Object... values);



//期待value在 [start,end] 范围上,支持long、double类型
Validate.inclusiveBetween(long start, long end, long value);
Validate.inclusiveBetween(long start, long end, long value, String msg, Object... values);

//支持自定义比较方式。value是待校验的值,需要实现Comparable接口,使用自身的compareTo()方法进行比较
Validate.inclusiveBetween(T start,T end, Comparable<T> value);
Validate.inclusiveBetween(T start,T end, Comparable<T> value, String msg, Object... values);

//期待value在 (start,end) 范围上,使用方式和 inclusiveBetween() 相同,区别在于是否包含边界(开、闭区间)
Validate.exclusiveBetween();



//期待字符串满足指定的正则表达式
Validate.matchesPattern(String str, String pattern);
Validate.matchesPattern(String str, String pattern, String msg, Object... values);

以上方法,当参数自身为null时,抛出NPE;当参数自身不为null、但不满足要求时,抛出 IllegalArgumentException。

 

//期待index在合法范围内,适用于字符串、数组、Collection类型
Validate.validIndex(T[] arr, int index);
Validate.validIndex(T[] arr, int index, String msg, Object... values);

以上方法,当参数自身为null时,抛出NPE;当参数自身不为null、但不满足要求时,抛出 IndexOutOfBoundsException。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
好的,我会尽力回答你的问题。对于字符串工具类的测试,我们可以使用JUnit框架中的断言(assertion)来进行测试。JUnit提供了多个断言方法,用于比较变量或表达式的值,从而判断程序是否按预期运行。 在测试字符串工具类时,我们可以使用如下的步骤: 1. 编写测试方法,测试字符串工具类中的每个方法。 2. 在测试方法中调用字符串工具类中的方法,得到预期结果。 3. 使用JUnit的断言方法比较预期结果和实际结果是否相等。 4. 运行测试方法,查看测试结果。 比如,我们可以编写如下的测试方法来测试字符串工具类中的`reverse`方法: ``` import org.junit.Test; import static org.junit.Assert.*; public class StringUtilTest { @Test public void testReverse() { String input = "hello"; String expectedOutput = "olleh"; String actualOutput = StringUtil.reverse(input); assertEquals(expectedOutput, actualOutput); } } ``` 其中,`@Test`注解表示该方法是一个测试方法,`assertEquals`断言方法用于比较预期结果和实际结果是否相等。 当我们运行该测试方法时,JUnit会自动执行`StringUtil.reverse`方法,并将其返回值与预期结果进行比较。如果比较结果不相等,则测试失败,JUnit会输出错误信息;如果比较结果相等,则测试通过,JUnit不会输出任何信息。 通过这种方法,我们可以对字符串工具类进行全面的测试,并保证其正确性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值