我定义了一个类似
的测试类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;
答案 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.