Delphi接口

时间:2015-12-04 20:19:40

标签: delphi interface

晚上好,

我正在尝试使用dUnit和PascalMock对我的一些Delphi代码进行单元测试。

有大量的遗留代码在所有接口上都没有,它们还包含传入自身对象的参数,例如:

TSelf = Class
  Function Hello(self: TSelf);
end;

然后我尝试将接口应用于TSelf:

ISelf = Interface(IInterface)
  Function Hello(self: TSelf)
end;

TSelf = Class(TInterfacedObject, ISelf)
  Function Hello(self: TSelf);
end;

这显然是失败的,因为" TSelf"是未定义的,这些是大型对象,有许多函数使用TSelf作为参数,是我唯一的选择,并将这些更改为TObject?并在方法中将它们投射到TSelf?

对此的任何帮助将不胜感激,因为它目前阻止我能够自动测试。

或者是否有一个不需要界面的模拟框架?

谢谢。

1 个答案:

答案 0 :(得分:0)

您可以使用前瞻性声明

type
  TSelf = class;

  ISelf = Interface
    procedure Hello(ASelf: TSelf);
  end;

  TSelf = Class(TInterfacedObject, ISelf)
    procedure Hello(ASelf: TSelf);
  end;

但是在这种情况下,必须在相同的类型声明部分中定义完整的TSelf类声明。

另外注意,使用self作为参数名称会令人困惑,并且无法编译该代码,以及没有结果类型的函数。