0

我定义了一个像

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

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

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

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;  
4

1 回答 1

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.
于 2013-09-27T21:44:37.540 回答