ReflectionTools.cs 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. using System;
  2. using System.Reflection;
  3. public static class ReflectionTools {
  4. // If the class is non-static
  5. public static Object InvokePrivate (Object objectUnderTest, string method, params object [] args)
  6. {
  7. Type t = objectUnderTest.GetType ();
  8. return t.InvokeMember (method,
  9. BindingFlags.InvokeMethod |
  10. BindingFlags.NonPublic |
  11. BindingFlags.Instance |
  12. BindingFlags.Static,
  13. null,
  14. objectUnderTest,
  15. args);
  16. }
  17. // if the class is static
  18. public static Object InvokePrivate (Type typeOfObjectUnderTest, string method, params object [] args)
  19. {
  20. MemberInfo [] members = typeOfObjectUnderTest.GetMembers (BindingFlags.NonPublic | BindingFlags.Static);
  21. foreach (var member in members) {
  22. if (member.Name == method) {
  23. return typeOfObjectUnderTest.InvokeMember (method,
  24. BindingFlags.NonPublic |
  25. BindingFlags.Static |
  26. BindingFlags.InvokeMethod,
  27. null,
  28. typeOfObjectUnderTest,
  29. args);
  30. }
  31. }
  32. return null;
  33. }
  34. public static T GetFieldValue<T> (this object obj, string name)
  35. {
  36. // Set the flags so that private and public fields from instances will be found
  37. var bindingFlags = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance;
  38. var field = obj.GetType ().GetField (name, bindingFlags);
  39. return (T)field?.GetValue (obj);
  40. }
  41. }