增加Assert的equals及notEquals

This commit is contained in:
mo_chou_555 2022-05-03 12:31:55 +08:00
parent 50d77194c8
commit 2a9eaa6a7f
2 changed files with 121 additions and 2 deletions

View File

@ -3,6 +3,7 @@ package cn.hutool.core.lang;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import java.util.Map;
@ -1003,6 +1004,99 @@ public class Assert {
return value;
}
/**
* 断言两个对象是否不相等,如果两个对象相等 抛出IllegalArgumentException 异常
* <pre class="code">
* Assert.notEquals(obj1,obj2);
* </pre>
*
* @param obj1 对象1
* @param obj2 对象2
* @throws IllegalArgumentException obj1 must be not equals obj2
*/
public static void notEquals(Object obj1, Object obj2) {
notEquals(obj1, obj2, "({}) must be not equals ({})", obj1, obj2);
}
/**
* 断言两个对象是否不相等,如果两个对象相等 抛出IllegalArgumentException 异常
* <pre class="code">
* Assert.notEquals(obj1,obj2,"obj1 must be not equals obj2");
* </pre>
*
* @param obj1 对象1
* @param obj2 对象2
* @param errorMsgTemplate 异常信息模板类似于"aa{}bb{}cc"
* @param params 异常信息参数用于替换"{}"占位符
* @throws IllegalArgumentException obj1 must be not equals obj2
*/
public static void notEquals(Object obj1, Object obj2, String errorMsgTemplate, Object... params) throws IllegalArgumentException {
notEquals(obj1, obj2, () -> new IllegalArgumentException(StrUtil.format(errorMsgTemplate, params)));
}
/**
* 断言两个对象是否不相等,如果两个对象相等,抛出指定类型异常,并使用指定的函数获取错误信息返回
*
* @param obj1 对象1
* @param obj2 对象2
* @param errorSupplier 错误抛出异常附带的消息生产接口
* @param <X> 异常类型
* @throws X obj1 must be not equals obj2
*/
public static <X extends Throwable> void notEquals(Object obj1, Object obj2, Supplier<X> errorSupplier) throws X {
if (ObjectUtil.equals(obj1, obj2)) {
throw errorSupplier.get();
}
}
// ----------------------------------------------------------------------------------------------------------- Check not equals
/**
* 断言两个对象是否相等,如果两个对象不相等 抛出IllegalArgumentException 异常
* <pre class="code">
* Assert.isEquals(obj1,obj2);
* </pre>
*
* @param obj1 对象1
* @param obj2 对象2
* @throws IllegalArgumentException obj1 must be equals obj2
*/
public static void isEquals(Object obj1, Object obj2) {
isEquals(obj1, obj2, "({}) must be equals ({})", obj1, obj2);
}
/**
* 断言两个对象是否相等,如果两个对象不相等 抛出IllegalArgumentException 异常
* <pre class="code">
* Assert.isEquals(obj1,obj2,"obj1 must be equals obj2");
* </pre>
*
* @param obj1 对象1
* @param obj2 对象2
* @param errorMsgTemplate 异常信息模板类似于"aa{}bb{}cc"
* @param params 异常信息参数用于替换"{}"占位符
* @throws IllegalArgumentException obj1 must be equals obj2
*/
public static void isEquals(Object obj1, Object obj2, String errorMsgTemplate, Object... params) throws IllegalArgumentException {
isEquals(obj1, obj2, () -> new IllegalArgumentException(StrUtil.format(errorMsgTemplate, params)));
}
/**
* 断言两个对象是否相等,如果两个对象不相等,抛出指定类型异常,并使用指定的函数获取错误信息返回
*
* @param obj1 对象1
* @param obj2 对象2
* @param errorSupplier 错误抛出异常附带的消息生产接口
* @param <X> 异常类型
* @throws X obj1 must be equals obj2
*/
public static <X extends Throwable> void isEquals(Object obj1, Object obj2, Supplier<X> errorSupplier) throws X {
if (ObjectUtil.notEqual(obj1, obj2)) {
throw errorSupplier.get();
}
}
// ----------------------------------------------------------------------------------------------------------- Check is equals
// -------------------------------------------------------------------------------------------------------------------------------------------- Private method start
/**

View File

@ -1,9 +1,10 @@
package cn.hutool.core.lang;
import cn.hutool.core.util.StrUtil;
import org.junit.Test;
public class AssertTest {
@Test
public void isNullTest(){
String a = null;
@ -33,6 +34,30 @@ public class AssertTest {
public void isTrueTest3() {
int i = -1;
//noinspection ConstantConditions
Assert.isTrue(i > 0, ()-> new IndexOutOfBoundsException("relation message to return"));
Assert.isTrue(i > 0, () -> new IndexOutOfBoundsException("relation message to return"));
}
@Test
public void isEqualsTest() {
//String a="ab";
//final String b = new String("abc");
String a = null;
final String b = null;
Assert.isEquals(a, b);
Assert.isEquals(a, b, "{}不等于{}", a, b);
Assert.isEquals(a, b, () -> new RuntimeException(StrUtil.format("{}和{}不相等", a, b)));
}
@Test
public void notEqualsTest() {
//String c="19";
//final String d = new String("19");
String c = null;
final String d = null;
//Assert.notEquals(c,d);
//Assert.notEquals(c,d,"{}等于{}",c,d);
Assert.notEquals(c, d, () -> new RuntimeException(StrUtil.format("{}和{}相等", c, d)));
}
}