2013-09-27 38 views
0

我定義的TestClass像如何從一個類

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

運行單元測試TestRunner的框架得到規定的程序列表中顯示定義testfunctions的名單,這是非常容易從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; 
+0

您可以通過使用RTTI做到這一點。 –

+0

什麼是RTTL函數 – Franz

+0

您可以使用['RTTI'](http://docwiki.embarcadero.com/RADStudio/XE3/en/Working_with_RTTI_Index)獲取所有方法名稱的列表。 –

回答

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. 
+0

Create和Free有什麼不同? –

+0

這只是個人喜好的問題。 – RRUZ