Friday, 23 August 2013

Testing private methods

public static object GetStaticField(Type t, string name) { return GetFieldImpl(t, null, name); } private static object GetFieldImpl(Type t, object instance, string name) { var f = FieldInfo(t, name); return f != null ? f.GetValue(instance) : null; } private static FieldInfo FieldInfo(Type t, string name) { var f = t.GetField(name, BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Static); return f; } private static void SetFieldImpl(Type t, object instance, string name, T value) { var f = FieldInfo(t, name); if (f != null) f.SetValue(instance, value); } public static object ExecuteMethod(object instance, string name, params object[] paramList) { var t = instance.GetType(); return ExecuteMethodImpl(t, instance, name, paramList); } public static object ExecuteMethodWithNullParameter(object instance, string name, int noOfParameters) { var t = instance.GetType(); var m = t.GetMethod(name, BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Static); var parameters = new object[noOfParameters]; for (var i = 0; i < noOfParameters; i++) parameters[i] = null; return m.Invoke(instance, parameters); } public static object ExecuteStaticMethod(Type t, string name, params object[] paramList) { return ExecuteMethodImpl(t, null, name, paramList); } private static object ExecuteMethodImpl(Type t, object instance, string name, object[] paramList) { if (paramList != null) { var paramTypes = GetParamTypes(paramList); var m = t.GetMethod(name, BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Static, null, paramTypes, null); return m.Invoke(instance, paramList); } else { var m = t.GetMethod(name, BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Static); return m.Invoke(instance, null); } } private static Type[] GetParamTypes(object[] paramList) { var paramTypes = new Type[paramList.Length]; for (var i = 0; i < paramList.Length; i++) paramTypes[i] = paramList[i].GetType(); return paramTypes; } }

No comments:

Post a Comment