在測試的時候,偶爾會有須要遍歷某個對象,獲取這個對象裏的全部的方法和屬性。
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