在测试的时候,偶尔会有须要遍历某个对象,获取这个对象里的全部的方法和属性。
OK好吧,这种需求,会在作代理的时候用到的。好比被测对象不固定,或者前期更新会比较频繁。每次的更改,致使测试代码常常变动。
这个时候,若是能够获取对象的全部属性和全部方法,而后按照需求注入对应的数据,那么或许就方便了不少。
像一些测试工具(像SOAPUI,PushToTest等),你提供了某些方法或者地址,它能够将对应的参数,方法都给反射出来,而后你须要作的事情就是填入对应的值了。
经过参看C#的文档(因为工做须要,目前主要工做在.net平台),发现了System.Reflection里有提供的一些方式和方法
好比,下面的,获取对象的全部属性segmentfault
static void Main(string[] args) { var t = ServiceProxy.GetTcpService<IConfigurationService().GetConfig("ETMongoDBConnectionString"); foreach (System.Reflection.PropertyInfo p in t.GetType().GetProperties()) { Console.WriteLine("Name:{0} Value:{1}",p.Name,p.GetValue(t)); } Console.ReadLine(); }
结果以下工具
遍历对象的方法,同样的的方式测试
var ts = ServiceProxy.GetTcpService<IConfigurationService>(); foreach (System.Reflection.MethodInfo m in ts.GetType().GetMethods()) { Console.WriteLine(m.Name); var ms = m.GetParameters(); foreach (var psinfo in ms) { Console.WriteLine(psinfo.Name + " "+psinfo.ParameterType.ToString()); } Console.WriteLine("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"); }
结果以下:spa