如何从类中获取已定义过程的列表

时间:2013-09-27 19:04:59

标签: delphi

我定义了一个类似

的测试类
MyTest = Class(TTestCLass)
  procedure DoMyTest_1 (...);
  procedure DoAnontherTest (...);
  function OnemoreTest : Boolean;
  .....
end; 

运行单元测试testrunner框架显示已定义测试函数的列表,并且很容易从此框架内的GUI / ListBox中选择单个测试。我想在运行时从类中提取已定义函数的List,并能够动态调用此函数。

这个想法是这样的,但我不知道如何实施

procedure ExtractProcedureNamefromClass (aClass : TObject) : TStringlist ; 
begin
  ?????
end;

procedure ClassaClassProcedureByName ( aClass : TObject ; FunctionName : String );
begin
  ///  can you do it more flexible  
  if Functionname=DoMyTest_1 then 
    MyClass.DoMyTest_1(...);
end;  

1 个答案:

答案 0 :(得分:4)

根据您的Delphi版本,您可以使用RTTI

喜欢这样

{$APPTYPE CONSOLE}


uses
  RTTI,
  Classes,
  SysUtils;

var
 LCtx : TRttiContext;
 LMethod : TRttiMethod;
begin
  try
    LCtx:=TRttiContext.Create;
    try
      //list the methods for the TStrings class
      for LMethod in  LCtx.GetType(TStrings).GetMethods do
        Writeln(LMethod.Name);
    finally
      LCtx.Free;
    end;
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
  Readln;
end.