From e8142ec7aae2840dd038ff46c3808800383ade92 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?circleliu=28=E5=88=98=E5=B3=A5=29?= Date: Mon, 19 Oct 2020 15:06:35 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=AD=97=E8=8A=82=E7=A0=81?= =?UTF-8?q?=E6=B3=A8=E5=85=A5=E7=B1=BB=E5=BF=BD=E7=95=A5mocker=E7=9A=84?= =?UTF-8?q?=E9=80=BB=E8=BE=91synthetic?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jsonzou/jmockdata/mocker/BeanMocker.java | 14 ++++---- .../jsonzou/jmockdata/mocker/EnumMocker.java | 34 +++++++++---------- .../jmockdata/mocker/GenericMocker.java | 9 +++-- .../jmockdata/util/ReflectionUtils.java | 3 ++ 4 files changed, 30 insertions(+), 30 deletions(-) diff --git a/src/main/java/com/github/jsonzou/jmockdata/mocker/BeanMocker.java b/src/main/java/com/github/jsonzou/jmockdata/mocker/BeanMocker.java index 98f29fe03..e98d5a023 100644 --- a/src/main/java/com/github/jsonzou/jmockdata/mocker/BeanMocker.java +++ b/src/main/java/com/github/jsonzou/jmockdata/mocker/BeanMocker.java @@ -55,14 +55,14 @@ private void setFieldValueByFieldAccessible(DataConfig mockConfig, Object result for (Class currentClass = clazz; currentClass != Object.class; currentClass = currentClass.getSuperclass()) { // 模拟有setter方法的字段 for (Field field :currentClass.getDeclaredFields()) { - if (field.isAnnotationPresent(MockIgnore.class)) { + if (field.isAnnotationPresent(MockIgnore.class) || field.isSynthetic()) { continue; } if (field.getName() != null && field.getName().equalsIgnoreCase("serialVersionUID")) { continue; } - + /** * 是否配置排除这个属性 */ @@ -87,22 +87,22 @@ private void setFieldValueByIntrospector(DataConfig mockConfig, Object result) t // 模拟有setter方法的字段 for (Entry entry : ReflectionUtils.fieldAndSetterMethod(currentClass).entrySet()) { Field field = entry.getKey(); - if (field.isAnnotationPresent(MockIgnore.class)) { + if (field.isAnnotationPresent(MockIgnore.class) || field.isSynthetic()) { continue; } - + if (field.getName() != null && field.getName().equalsIgnoreCase("serialVersionUID")) { continue; } - + /** * 是否配置排除这个属性 */ if(mockConfig.globalConfig().isConfigExcludeMock(clazz,field.getName())){ - continue; + continue; } ReflectionUtils - .setRefValue(result, entry.getValue(), new BaseMocker(field.getGenericType()).mock(mockConfig.globalConfig().getDataConfig(currentClass,field.getName()))); + .setRefValue(result, entry.getValue(), new BaseMocker(field.getGenericType()).mock(mockConfig.globalConfig().getDataConfig(currentClass,field.getName()))); } } } diff --git a/src/main/java/com/github/jsonzou/jmockdata/mocker/EnumMocker.java b/src/main/java/com/github/jsonzou/jmockdata/mocker/EnumMocker.java index 74928c770..2da46c430 100644 --- a/src/main/java/com/github/jsonzou/jmockdata/mocker/EnumMocker.java +++ b/src/main/java/com/github/jsonzou/jmockdata/mocker/EnumMocker.java @@ -1,37 +1,35 @@ package com.github.jsonzou.jmockdata.mocker; import com.github.jsonzou.jmockdata.DataConfig; -import com.github.jsonzou.jmockdata.MockConfig; import com.github.jsonzou.jmockdata.MockException; import com.github.jsonzou.jmockdata.Mocker; import com.github.jsonzou.jmockdata.util.RandomUtils; -import java.lang.reflect.Field; /** * Enum对象模拟器 */ public class EnumMocker implements Mocker { - private Class clazz; + private Class clazz; - public EnumMocker(Class clazz) { - this.clazz = clazz; - } + public EnumMocker(Class clazz) { + this.clazz = clazz; + } - @Override - public T mock(DataConfig mockConfig) { + @Override + public T mock(DataConfig mockConfig) { - Enum[] enums = mockConfig.globalConfig().getcacheEnum(clazz.getName()); - if (enums == null) { - // Field field = clazz.getDeclaredField("$VALUES"); - // field.setAccessible(true); - enums =(Enum[]) clazz.getEnumConstants(); - if (enums.length == 0) { - throw new MockException("空的enum不能模拟"); + Enum[] enums = mockConfig.globalConfig().getcacheEnum(clazz.getName()); + if (enums == null) { + // Field field = clazz.getDeclaredField("$VALUES"); + // field.setAccessible(true); + enums =(Enum[]) clazz.getEnumConstants(); + if (enums.length == 0) { + throw new MockException("空的enum不能模拟"); + } + mockConfig.globalConfig().cacheEnum(clazz.getName(), enums); } - mockConfig.globalConfig().cacheEnum(clazz.getName(), enums); + return (T) enums[RandomUtils.nextInt(0, enums.length)]; } - return (T) enums[RandomUtils.nextInt(0, enums.length)]; - } } diff --git a/src/main/java/com/github/jsonzou/jmockdata/mocker/GenericMocker.java b/src/main/java/com/github/jsonzou/jmockdata/mocker/GenericMocker.java index fef7491db..98cfed88a 100644 --- a/src/main/java/com/github/jsonzou/jmockdata/mocker/GenericMocker.java +++ b/src/main/java/com/github/jsonzou/jmockdata/mocker/GenericMocker.java @@ -1,7 +1,6 @@ package com.github.jsonzou.jmockdata.mocker; import com.github.jsonzou.jmockdata.DataConfig; -import com.github.jsonzou.jmockdata.MockConfig; import com.github.jsonzou.jmockdata.Mocker; import java.lang.reflect.ParameterizedType; @@ -12,13 +11,13 @@ public class GenericMocker implements Mocker { private ParameterizedType type; - GenericMocker(ParameterizedType type) { - this.type = type; - } - @Override public Object mock(DataConfig mockConfig) { return new BaseMocker(type.getRawType(), type.getActualTypeArguments()).mock(mockConfig); } + GenericMocker(ParameterizedType type) { + this.type = type; + } + } diff --git a/src/main/java/com/github/jsonzou/jmockdata/util/ReflectionUtils.java b/src/main/java/com/github/jsonzou/jmockdata/util/ReflectionUtils.java index cdb6fd9ee..6ffd818c7 100644 --- a/src/main/java/com/github/jsonzou/jmockdata/util/ReflectionUtils.java +++ b/src/main/java/com/github/jsonzou/jmockdata/util/ReflectionUtils.java @@ -54,6 +54,9 @@ public static Map fieldAndSetterMethod(Class clazz) throws Intros BeanInfo beanInfo = Introspector.getBeanInfo(clazz, Object.class); PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors(); for (Field field : clazz.getDeclaredFields()) { + if (field.isSynthetic()){ + continue; + } for (PropertyDescriptor propertyDescriptor : propertyDescriptors) { if (propertyDescriptor.getName().equals(field.getName()) && propertyDescriptor.getWriteMethod() != null) { map.put(field, propertyDescriptor.getWriteMethod());