This commit is contained in:
Looly 2022-06-27 21:47:38 +08:00
parent 6d8509155a
commit fc091b01a2

View File

@ -43,16 +43,16 @@ public class BeanUtilTest {
public void isBeanTest() {
// HashMap不包含setXXX方法不是bean
boolean isBean = BeanUtil.isBean(HashMap.class);
final boolean isBean = BeanUtil.isBean(HashMap.class);
Assert.assertFalse(isBean);
}
@Test
public void fillBeanTest() {
Person person = BeanUtil.fillBean(new Person(), new ValueProvider<String>() {
final Person person = BeanUtil.fillBean(new Person(), new ValueProvider<String>() {
@Override
public Object value(String key, Type valueType) {
public Object value(final String key, final Type valueType) {
switch (key) {
case "name":
return "张三";
@ -63,7 +63,7 @@ public class BeanUtilTest {
}
@Override
public boolean containsKey(String key) {
public boolean containsKey(final String key) {
// 总是存在key
return true;
}
@ -76,12 +76,12 @@ public class BeanUtilTest {
@Test
public void fillBeanWithMapIgnoreCaseTest() {
Map<String, Object> map = MapBuilder.<String, Object>create()
final Map<String, Object> map = MapBuilder.<String, Object>create()
.put("Name", "Joe")
.put("aGe", 12)
.put("openId", "DFDFSDFWERWER")
.build();
SubPerson person = BeanUtil.fillBeanWithMapIgnoreCase(map, new SubPerson(), false);
final SubPerson person = BeanUtil.fillBeanWithMapIgnoreCase(map, new SubPerson(), false);
Assert.assertEquals("Joe", person.getName());
Assert.assertEquals(12, person.getAge());
Assert.assertEquals("DFDFSDFWERWER", person.getOpenid());
@ -89,7 +89,7 @@ public class BeanUtilTest {
@Test
public void toBeanTest() {
SubPerson person = new SubPerson();
final SubPerson person = new SubPerson();
person.setAge(14);
person.setOpenid("11213232");
person.setName("测试A11");
@ -108,12 +108,12 @@ public class BeanUtilTest {
*/
@Test
public void toBeanIgnoreErrorTest() {
HashMap<String, Object> map = MapUtil.newHashMap();
final HashMap<String, Object> map = MapUtil.newHashMap();
map.put("name", "Joe");
// 错误的类型此处忽略
map.put("age", "aaaaaa");
Person person = BeanUtil.toBeanIgnoreError(map, Person.class);
final Person person = BeanUtil.toBeanIgnoreError(map, Person.class);
Assert.assertEquals("Joe", person.getName());
// 错误的类型不copy这个字段使用对象创建的默认值
Assert.assertEquals(0, person.getAge());
@ -121,27 +121,27 @@ public class BeanUtilTest {
@Test
public void mapToBeanIgnoreCaseTest() {
HashMap<String, Object> map = MapUtil.newHashMap();
final HashMap<String, Object> map = MapUtil.newHashMap();
map.put("Name", "Joe");
map.put("aGe", 12);
Person person = BeanUtil.toBeanIgnoreCase(map, Person.class, false);
final Person person = BeanUtil.toBeanIgnoreCase(map, Person.class, false);
Assert.assertEquals("Joe", person.getName());
Assert.assertEquals(12, person.getAge());
}
@Test
public void mapToBeanTest() {
HashMap<String, Object> map = MapUtil.newHashMap();
final HashMap<String, Object> map = MapUtil.newHashMap();
map.put("a_name", "Joe");
map.put("b_age", 12);
// 别名用于对应bean的字段名
HashMap<String, String> mapping = MapUtil.newHashMap();
final HashMap<String, String> mapping = MapUtil.newHashMap();
mapping.put("a_name", "name");
mapping.put("b_age", "age");
Person person = BeanUtil.toBean(map, Person.class, CopyOptions.create().setFieldMapping(mapping));
final Person person = BeanUtil.toBean(map, Person.class, CopyOptions.create().setFieldMapping(mapping));
Assert.assertEquals("Joe", person.getName());
Assert.assertEquals(12, person.getAge());
}
@ -151,12 +151,12 @@ public class BeanUtilTest {
*/
@Test
public void mapToBeanTest2() {
HashMap<String, Object> map = MapUtil.newHashMap();
final HashMap<String, Object> map = MapUtil.newHashMap();
map.put("name", "Joe");
map.put("age", 12);
// 非空构造也可以实例化成功
Person2 person = BeanUtil.toBean(map, Person2.class, CopyOptions.create());
final Person2 person = BeanUtil.toBean(map, Person2.class, CopyOptions.create());
Assert.assertEquals("Joe", person.name);
Assert.assertEquals(12, person.age);
}
@ -166,20 +166,20 @@ public class BeanUtilTest {
*/
@Test(expected = NumberFormatException.class)
public void mapToBeanWinErrorTest() {
Map<String, String> map = new HashMap<>();
final Map<String, String> map = new HashMap<>();
map.put("age", "哈哈");
BeanUtil.toBean(map, Person.class);
}
@Test
public void beanToMapTest() {
SubPerson person = new SubPerson();
final SubPerson person = new SubPerson();
person.setAge(14);
person.setOpenid("11213232");
person.setName("测试A11");
person.setSubName("sub名字");
Map<String, Object> map = BeanUtil.beanToMap(person);
final Map<String, Object> map = BeanUtil.beanToMap(person);
Assert.assertEquals("测试A11", map.get("name"));
Assert.assertEquals(14, map.get("age"));
@ -190,13 +190,13 @@ public class BeanUtilTest {
@Test
public void beanToMapNullPropertiesTest() {
SubPerson person = new SubPerson();
final SubPerson person = new SubPerson();
person.setAge(14);
person.setOpenid("11213232");
person.setName("测试A11");
person.setSubName("sub名字");
Map<String, Object> map = BeanUtil.beanToMap(person, null);
final Map<String, Object> map = BeanUtil.beanToMap(person, (String[]) null);
Assert.assertEquals("测试A11", map.get("name"));
Assert.assertEquals(14, map.get("age"));
@ -207,32 +207,32 @@ public class BeanUtilTest {
@Test
public void beanToMapTest2() {
SubPerson person = new SubPerson();
final SubPerson person = new SubPerson();
person.setAge(14);
person.setOpenid("11213232");
person.setName("测试A11");
person.setSubName("sub名字");
Map<String, Object> map = BeanUtil.beanToMap(person, true, true);
final Map<String, Object> map = BeanUtil.beanToMap(person, true, true);
Assert.assertEquals("sub名字", map.get("sub_name"));
}
@Test
public void beanToMapWithValueEditTest() {
SubPerson person = new SubPerson();
final SubPerson person = new SubPerson();
person.setAge(14);
person.setOpenid("11213232");
person.setName("测试A11");
person.setSubName("sub名字");
Map<String, Object> map = BeanUtil.beanToMap(person, new LinkedHashMap<>(),
final Map<String, Object> map = BeanUtil.beanToMap(person, new LinkedHashMap<>(),
CopyOptions.create().setFieldValueEditor((key, value) -> key + "_" + value));
Assert.assertEquals("subName_sub名字", map.get("subName"));
}
@Test
public void beanToMapWithAliasTest() {
SubPersonWithAlias person = new SubPersonWithAlias();
final SubPersonWithAlias person = new SubPersonWithAlias();
person.setAge(14);
person.setOpenid("11213232");
person.setName("测试A11");
@ -241,13 +241,13 @@ public class BeanUtilTest {
person.setBooleana(true);
person.setBooleanb(true);
Map<String, Object> map = BeanUtil.beanToMap(person);
final Map<String, Object> map = BeanUtil.beanToMap(person);
Assert.assertEquals("sub名字", map.get("aliasSubName"));
}
@Test
public void mapToBeanWithAliasTest() {
Map<String, Object> map = MapUtil.newHashMap();
final Map<String, Object> map = MapUtil.newHashMap();
map.put("aliasSubName", "sub名字");
map.put("slow", true);
map.put("is_booleana", "1");
@ -263,7 +263,7 @@ public class BeanUtilTest {
public void beanToMapWithLocalDateTimeTest() {
final LocalDateTime now = LocalDateTime.now();
SubPerson person = new SubPerson();
final SubPerson person = new SubPerson();
person.setAge(14);
person.setOpenid("11213232");
person.setName("测试A11");
@ -271,22 +271,22 @@ public class BeanUtilTest {
person.setDate(now);
person.setDate2(now.toLocalDate());
Map<String, Object> map = BeanUtil.beanToMap(person, false, true);
final Map<String, Object> map = BeanUtil.beanToMap(person, false, true);
Assert.assertEquals(now, map.get("date"));
Assert.assertEquals(now.toLocalDate(), map.get("date2"));
}
@Test
public void getPropertyTest() {
SubPerson person = new SubPerson();
final SubPerson person = new SubPerson();
person.setAge(14);
person.setOpenid("11213232");
person.setName("测试A11");
person.setSubName("sub名字");
Object name = BeanUtil.getProperty(person, "name");
final Object name = BeanUtil.getProperty(person, "name");
Assert.assertEquals("测试A11", name);
Object subName = BeanUtil.getProperty(person, "subName");
final Object subName = BeanUtil.getProperty(person, "subName");
Assert.assertEquals("sub名字", subName);
}
@ -299,9 +299,9 @@ public class BeanUtilTest {
@Test
public void getPropertyDescriptorsTest() {
HashSet<Object> set = CollUtil.newHashSet();
PropertyDescriptor[] propertyDescriptors = BeanUtil.getPropertyDescriptors(SubPerson.class);
for (PropertyDescriptor propertyDescriptor : propertyDescriptors) {
final HashSet<Object> set = CollUtil.newHashSet();
final PropertyDescriptor[] propertyDescriptors = BeanUtil.getPropertyDescriptors(SubPerson.class);
for (final PropertyDescriptor propertyDescriptor : propertyDescriptors) {
set.add(propertyDescriptor.getName());
}
Assert.assertTrue(set.contains("age"));
@ -314,13 +314,13 @@ public class BeanUtilTest {
@Test
public void copyPropertiesTest() {
SubPerson person = new SubPerson();
final SubPerson person = new SubPerson();
person.setAge(14);
person.setOpenid("11213232");
person.setName("测试A11");
person.setSubName("sub名字");
SubPerson person1 = BeanUtil.copyProperties(person, SubPerson.class);
final SubPerson person1 = BeanUtil.copyProperties(person, SubPerson.class);
Assert.assertEquals(14, person1.getAge());
Assert.assertEquals("11213232", person1.getOpenid());
Assert.assertEquals("测试A11", person1.getName());
@ -330,23 +330,23 @@ public class BeanUtilTest {
@Test
@Ignore
public void multiThreadTest(){
Student student = new Student();
final Student student = new Student();
student.setName("张三");
student.setAge(123);
student.setNo(3158L);
Student student2 = new Student();
final Student student2 = new Student();
student.setName("李四");
student.setAge(125);
student.setNo(8848L);
List<Student> studentList = ListUtil.of(student, student2);
final List<Student> studentList = ListUtil.of(student, student2);
for (int i=0;i<5000;i++){
new Thread(()->{
List<Student> list = ObjectUtil.clone(studentList);
List<Student> listReps = list.stream().map(s1 -> {
Student s2 = new Student();
final List<Student> list = ObjectUtil.clone(studentList);
final List<Student> listReps = list.stream().map(s1 -> {
final Student s2 = new Student();
BeanUtil.copyProperties(s1, s2);
return s2;
}).collect(Collectors.toList());
@ -360,27 +360,27 @@ public class BeanUtilTest {
@Test
public void copyPropertiesHasBooleanTest() {
SubPerson p1 = new SubPerson();
final SubPerson p1 = new SubPerson();
p1.setSlow(true);
// 测试boolean参数值isXXX形式
SubPerson p2 = new SubPerson();
final SubPerson p2 = new SubPerson();
BeanUtil.copyProperties(p1, p2);
Assert.assertTrue(p2.getSlow());
// 测试boolean参数值非isXXX形式
SubPerson2 p3 = new SubPerson2();
final SubPerson2 p3 = new SubPerson2();
BeanUtil.copyProperties(p1, p3);
Assert.assertTrue(p3.getSlow());
}
@Test
public void copyPropertiesIgnoreNullTest() {
SubPerson p1 = new SubPerson();
final SubPerson p1 = new SubPerson();
p1.setSlow(true);
p1.setName(null);
SubPerson2 p2 = new SubPerson2();
final SubPerson2 p2 = new SubPerson2();
p2.setName("oldName");
// null值不覆盖目标属性
@ -395,12 +395,12 @@ public class BeanUtilTest {
@Test
public void copyPropertiesBeanToMapTest() {
// 测试BeanToMap
SubPerson p1 = new SubPerson();
final SubPerson p1 = new SubPerson();
p1.setSlow(true);
p1.setName("测试");
p1.setSubName("sub测试");
Map<String, Object> map = MapUtil.newHashMap();
final Map<String, Object> map = MapUtil.newHashMap();
BeanUtil.copyProperties(p1, map);
Assert.assertTrue((Boolean) map.get("slow"));
Assert.assertEquals("测试", map.get("name"));
@ -410,12 +410,12 @@ public class BeanUtilTest {
@Test
public void copyPropertiesMapToMapTest() {
// 测试MapToMap
Map<String, Object> p1 = new HashMap<>();
final Map<String, Object> p1 = new HashMap<>();
p1.put("isSlow", true);
p1.put("name", "测试");
p1.put("subName", "sub测试");
Map<String, Object> map = MapUtil.newHashMap();
final Map<String, Object> map = MapUtil.newHashMap();
BeanUtil.copyProperties(p1, map);
Assert.assertTrue((Boolean) map.get("isSlow"));
Assert.assertEquals("测试", map.get("name"));
@ -424,11 +424,11 @@ public class BeanUtilTest {
@Test
public void trimBeanStrFieldsTest() {
Person person = new Person();
final Person person = new Person();
person.setAge(1);
person.setName(" 张三 ");
person.setOpenid(null);
Person person2 = BeanUtil.trimStrFields(person);
final Person person2 = BeanUtil.trimStrFields(person);
// 是否改变原对象
Assert.assertEquals("张三", person.getName());
@ -494,7 +494,7 @@ public class BeanUtilTest {
public static class Person2 {
public Person2(String name, int age, String openid) {
public Person2(final String name, final int age, final String openid) {
this.name = name;
this.age = age;
this.openid = openid;
@ -510,11 +510,11 @@ public class BeanUtilTest {
*/
@Test
public void beanToBeanOverlayFieldTest() {
SubPersonWithOverlayTransientField source = new SubPersonWithOverlayTransientField();
final SubPersonWithOverlayTransientField source = new SubPersonWithOverlayTransientField();
source.setName("zhangsan");
source.setAge(20);
source.setOpenid("1");
SubPersonWithOverlayTransientField dest = new SubPersonWithOverlayTransientField();
final SubPersonWithOverlayTransientField dest = new SubPersonWithOverlayTransientField();
BeanUtil.copyProperties(source, dest);
Assert.assertEquals(source.getName(), dest.getName());
@ -525,7 +525,7 @@ public class BeanUtilTest {
@Test
public void beanToBeanTest() {
// 修复对象无getter方法导致报错的问题
Page page1 = new Page();
final Page page1 = new Page();
BeanUtil.toBean(page1, Page.class);
}
@ -536,7 +536,7 @@ public class BeanUtilTest {
return optimizeCountSql;
}
public Page setOptimizeCountSql(boolean optimizeCountSql) {
public Page setOptimizeCountSql(final boolean optimizeCountSql) {
this.optimizeCountSql = optimizeCountSql;
return this;
}
@ -545,10 +545,10 @@ public class BeanUtilTest {
@Test
public void copyBeanToBeanTest() {
// 测试在copyProperties方法中alias是否有效
Food info = new Food();
final Food info = new Food();
info.setBookID("0");
info.setCode("123");
HllFoodEntity entity = new HllFoodEntity();
final HllFoodEntity entity = new HllFoodEntity();
BeanUtil.copyProperties(info, entity);
Assert.assertEquals(info.getBookID(), entity.getBookId());
Assert.assertEquals(info.getCode(), entity.getCode2());
@ -556,10 +556,10 @@ public class BeanUtilTest {
@Test
public void copyBeanTest() {
Food info = new Food();
final Food info = new Food();
info.setBookID("0");
info.setCode("123");
Food newFood = BeanUtil.copyProperties(info, Food.class, "code");
final Food newFood = BeanUtil.copyProperties(info, Food.class, "code");
Assert.assertEquals(info.getBookID(), newFood.getBookID());
Assert.assertNull(newFood.getCode());
}
@ -571,11 +571,11 @@ public class BeanUtilTest {
@Test
public void copyBeanPropertiesFilterTest() {
Food info = new Food();
final Food info = new Food();
info.setBookID("0");
info.setCode("");
Food newFood = new Food();
CopyOptions copyOptions = CopyOptions.create().setPropertiesFilter((f, v) -> !(v instanceof CharSequence) || StrUtil.isNotBlank(v.toString()));
final Food newFood = new Food();
final CopyOptions copyOptions = CopyOptions.create().setPropertiesFilter((f, v) -> !(v instanceof CharSequence) || StrUtil.isNotBlank(v.toString()));
BeanUtil.copyProperties(info, newFood, copyOptions);
Assert.assertEquals(info.getBookID(), newFood.getBookID());
Assert.assertNull(newFood.getCode());
@ -584,14 +584,13 @@ public class BeanUtilTest {
@Test
public void copyBeanPropertiesFunctionFilterTest() {
//https://gitee.com/dromara/hutool/pulls/590
Person o = new Person();
final Person o = new Person();
o.setName("asd");
o.setAge(123);
o.setOpenid("asd");
@SuppressWarnings("unchecked")
CopyOptions copyOptions = CopyOptions.create().setIgnoreProperties(Person::getAge,Person::getOpenid);
Person n = new Person();
@SuppressWarnings("unchecked") final CopyOptions copyOptions = CopyOptions.create().setIgnoreProperties(Person::getAge,Person::getOpenid);
final Person n = new Person();
BeanUtil.copyProperties(o, n, copyOptions);
// 是否忽略拷贝属性
@ -617,9 +616,9 @@ public class BeanUtilTest {
@Test
public void setPropertiesTest() {
Map<String, Object> resultMap = MapUtil.newHashMap();
final Map<String, Object> resultMap = MapUtil.newHashMap();
BeanUtil.setProperty(resultMap, "codeList[0].name", "张三");
Assert.assertEquals("{codeList={0={name=张三}}}", resultMap.toString());
Assert.assertEquals("{codeList=[{name=张三}]}", resultMap.toString());
}
@Test
@ -643,18 +642,18 @@ public class BeanUtilTest {
@Test
public void copyListTest() {
Student student = new Student();
final Student student = new Student();
student.setName("张三");
student.setAge(123);
student.setNo(3158L);
Student student2 = new Student();
final Student student2 = new Student();
student.setName("李四");
student.setAge(125);
student.setNo(8848L);
List<Student> studentList = ListUtil.of(student, student2);
List<Person> people = BeanUtil.copyToList(studentList, Person.class);
final List<Student> studentList = ListUtil.of(student, student2);
final List<Person> people = BeanUtil.copyToList(studentList, Person.class);
Assert.assertEquals(studentList.size(), people.size());
for (int i = 0; i < studentList.size(); i++) {
@ -667,14 +666,14 @@ public class BeanUtilTest {
@Test
public void toMapTest() {
// 测试转map的时候返回key
PrivilegeIClassification a = new PrivilegeIClassification();
final PrivilegeIClassification a = new PrivilegeIClassification();
a.setId("1");
a.setName("2");
a.setCode("3");
a.setCreateTime(new Date());
a.setSortOrder(9L);
Map<String, Object> f = BeanUtil.beanToMap(
final Map<String, Object> f = BeanUtil.beanToMap(
a,
new LinkedHashMap<>(),
false,
@ -696,19 +695,19 @@ public class BeanUtilTest {
@Test
public void getFieldValue() {
TestPojo testPojo = new TestPojo();
final TestPojo testPojo = new TestPojo();
testPojo.setName("名字");
TestPojo2 testPojo2 = new TestPojo2();
final TestPojo2 testPojo2 = new TestPojo2();
testPojo2.setAge(2);
TestPojo2 testPojo3 = new TestPojo2();
final TestPojo2 testPojo3 = new TestPojo2();
testPojo3.setAge(3);
testPojo.setTestPojo2List(new TestPojo2[]{testPojo2, testPojo3});
BeanPath beanPath = BeanPath.create("testPojo2List.age");
Object o = beanPath.get(testPojo);
final BeanPath beanPath = BeanPath.create("testPojo2List.age");
final Object o = beanPath.get(testPojo);
Assert.assertEquals(Integer.valueOf(2), ArrayUtil.get(o, 0));
Assert.assertEquals(Integer.valueOf(3), ArrayUtil.get(o, 1));
@ -741,18 +740,18 @@ public class BeanUtilTest {
*/
@Test
public void beanToBeanCopyOptionsTest() {
ChildVo1 childVo1 = new ChildVo1();
final ChildVo1 childVo1 = new ChildVo1();
childVo1.setChild_address("中国北京五道口");
childVo1.setChild_name("张三");
childVo1.setChild_father_name("张无忌");
childVo1.setChild_mother_name("赵敏敏");
CopyOptions copyOptions = CopyOptions.create().
final CopyOptions copyOptions = CopyOptions.create().
//setIgnoreNullValue(true).
//setIgnoreCase(false).
setFieldNameEditor(StrUtil::toCamelCase);
ChildVo2 childVo2 = new ChildVo2();
final ChildVo2 childVo2 = new ChildVo2();
BeanUtil.copyProperties(childVo1, childVo2, copyOptions);
Assert.assertEquals(childVo1.getChild_address(), childVo2.getChildAddress());
@ -779,8 +778,8 @@ public class BeanUtilTest {
@Test
public void issueI41WKPTest(){
Test1 t1 = new Test1().setStrList(ListUtil.toList("list"));
Test2 t2_hu = new Test2();
final Test1 t1 = new Test1().setStrList(ListUtil.toList("list"));
final Test2 t2_hu = new Test2();
BeanUtil.copyProperties(t1, t2_hu, CopyOptions.create().setIgnoreError(true));
Assert.assertNull(t2_hu.getStrList());
}
@ -799,10 +798,10 @@ public class BeanUtilTest {
@Test
public void issuesI53O9JTest(){
Map<String, String> map = new HashMap<>();
final Map<String, String> map = new HashMap<>();
map.put("statusIdUpdateTime", "");
WkCrmCustomer customer = new WkCrmCustomer();
final WkCrmCustomer customer = new WkCrmCustomer();
BeanUtil.copyProperties(map, customer);
Assert.assertNull(customer.getStatusIdUpdateTime());
@ -816,22 +815,22 @@ public class BeanUtilTest {
@Test
public void valueProviderToBeanTest(){
// https://gitee.com/dromara/hutool/issues/I5B4R7
CopyOptions copyOptions = CopyOptions.create();
Map<String, String> filedMap= new HashMap<>();
final CopyOptions copyOptions = CopyOptions.create();
final Map<String, String> filedMap= new HashMap<>();
filedMap.put("name", "sourceId");
copyOptions.setFieldMapping(filedMap);
TestPojo pojo = BeanUtil.toBean(TestPojo.class, new ValueProvider<String>() {
final TestPojo pojo = BeanUtil.toBean(TestPojo.class, new ValueProvider<String>() {
final HashMap<String, Object> map = new HashMap<>();
{
map.put("sourceId", "123");
}
@Override
public Object value(String key, Type valueType) {
public Object value(final String key, final Type valueType) {
return map.get(key);
}
@Override
public boolean containsKey(String key) {
public boolean containsKey(final String key) {
return map.containsKey(key);
}
}, copyOptions);