unfold parameter list for n.e.f method

This commit is contained in:
金戟 2020-07-22 23:26:03 +08:00
parent 8dd76e22ff
commit 9c757cebc1
2 changed files with 73 additions and 16 deletions

View File

@ -33,38 +33,38 @@ public class TypeUtil {
/**
* add item to constructor pool
*/
public static void addToConstructorPool(TestableSubstitution np) {
mockNewPool.add(np);
public static void addToConstructorPool(TestableSubstitution substitution) {
mockNewPool.add(substitution);
}
/**
* add item to method pool
*/
public static void addToMemberMethodPool(TestableSubstitution np) {
mockMemberPool.add(np);
public static void addToMemberMethodPool(TestableSubstitution substitution) {
mockMemberPool.add(substitution);
}
/**
* substitution entry for new
*/
public static <T> T wrapNew(Class<T> ct, Object... as) {
Class[] cs = TypeUtil.getClassesFromObjects(as);
public static <T> T wrapNew(Class<T> classType, Object... parameters) {
Class[] cs = TypeUtil.getClassesFromObjects(parameters);
if (!mockNewPool.isEmpty()) {
try {
TestableSubstitution pi = getFromConstructorPool(ct, cs);
TestableSubstitution pi = getFromConstructorPool(classType, cs);
if (pi != null) {
Method m = pi.targetObject.getClass().getDeclaredMethod(pi.methodName, pi.parameterTypes);
m.setAccessible(true);
return (T)m.invoke(pi.targetObject, as);
return (T)m.invoke(pi.targetObject, parameters);
}
} catch (Exception e) {
return null;
}
}
try {
Constructor c = TypeUtil.getConstructorByParameterTypes(ct.getConstructors(), cs);
Constructor c = TypeUtil.getConstructorByParameterTypes(classType.getConstructors(), cs);
if (c != null) {
return (T)c.newInstance(as);
return (T)c.newInstance(parameters);
}
} catch (Exception e) {
return null;
@ -75,25 +75,25 @@ public class TypeUtil {
/**
* substitution entry for member call
*/
public static <T> T wrapCall(Object obj, String mn, Object... as) {
Class[] cs = TypeUtil.getClassesFromObjects(as);
public static <T> T wrapCall(Object targetObject, String methodName, Object... parameters) {
Class[] cs = TypeUtil.getClassesFromObjects(parameters);
if (!mockMemberPool.isEmpty()) {
try {
TestableSubstitution pi = getFromMemberMethodPool(mn, cs);
TestableSubstitution pi = getFromMemberMethodPool(methodName, cs);
if (pi != null) {
Method m = pi.targetObject.getClass().getDeclaredMethod(pi.methodName, pi.parameterTypes);
m.setAccessible(true);
return (T)m.invoke(pi.targetObject, as);
return (T)m.invoke(pi.targetObject, parameters);
}
} catch (Exception e) {
return null;
}
}
try {
Method m = TypeUtil.getMethodByNameAndParameterTypes(obj.getClass().getDeclaredMethods(), mn, cs);
Method m = TypeUtil.getMethodByNameAndParameterTypes(targetObject.getClass().getDeclaredMethods(), methodName, cs);
if (m != null) {
m.setAccessible(true);
return (T)m.invoke(obj, as);
return (T)m.invoke(targetObject, parameters);
}
} catch (Exception e) {
return null;

View File

@ -1,5 +1,6 @@
package n;
import static com.alibaba.testable.util.TypeUtil.wrapCall;
import static com.alibaba.testable.util.TypeUtil.wrapNew;
public final class e {
@ -61,4 +62,60 @@ public final class e {
return wrapNew(ct, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12);
}
public static <T> T f(Object o, String mn) {
return wrapCall(o, mn);
}
public static <T> T f(Object o, String mn, Object a1) {
return wrapCall(o, mn, a1);
}
public static <T> T f(Object o, String mn, Object a1, Object a2) {
return wrapCall(o, mn, a1, a2);
}
public static <T> T f(Object o, String mn, Object a1, Object a2, Object a3) {
return wrapCall(o, mn, a1, a2, a3);
}
public static <T> T f(Object o, String mn, Object a1, Object a2, Object a3, Object a4) {
return wrapCall(o, mn, a1, a2, a3, a4);
}
public static <T> T f(Object o, String mn, Object a1, Object a2, Object a3, Object a4, Object a5) {
return wrapCall(o, mn, a1, a2, a3, a4, a5);
}
public static <T> T f(Object o, String mn, Object a1, Object a2, Object a3, Object a4, Object a5, Object a6) {
return wrapCall(o, mn, a1, a2, a3, a4, a5, a6);
}
public static <T> T f(Object o, String mn, Object a1, Object a2, Object a3, Object a4, Object a5, Object a6, Object a7) {
return wrapCall(o, mn, a1, a2, a3, a4, a5, a6, a7);
}
public static <T> T f(Object o, String mn, Object a1, Object a2, Object a3, Object a4, Object a5, Object a6, Object a7,
Object a8) {
return wrapCall(o, mn, a1, a2, a3, a4, a5, a6, a7, a8);
}
public static <T> T f(Object o, String mn, Object a1, Object a2, Object a3, Object a4, Object a5, Object a6, Object a7,
Object a8, Object a9) {
return wrapCall(o, mn, a1, a2, a3, a4, a5, a6, a7, a8, a9);
}
public static <T> T f(Object o, String mn, Object a1, Object a2, Object a3, Object a4, Object a5, Object a6, Object a7,
Object a8, Object a9, Object a10) {
return wrapCall(o, mn, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10);
}
public static <T> T f(Object o, String mn, Object a1, Object a2, Object a3, Object a4, Object a5, Object a6, Object a7,
Object a8, Object a9, Object a10, Object a11) {
return wrapCall(o, mn, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11);
}
public static <T> T f(Object o, String mn, Object a1, Object a2, Object a3, Object a4, Object a5, Object a6, Object a7,
Object a8, Object a9, Object a10, Object a11, Object a12) {
return wrapCall(o, mn, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12);
}
}