2013-09-27 3 views
0

Я определяю TestClass какКак получить список установленных процедур из класса

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

Запуск Модульное тестирование рамки TestRunner показывает список определенных функций тестов, и это очень легко выбрать индивидуальный тест с помощью графического интерфейса/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; 
+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

Какой смысл создавать и бесплатно? –

+0

Это только вопрос личных предпочтений. – RRUZ

Смежные вопросы