Delphi接口

Delphi接口,delphi,interface,Delphi,Interface,晚上好 我试图使用dUnit和PascalMock对我的一些Delphi代码进行单元测试 有大量的遗留代码根本没有接口,它们也包含传入自身对象的参数,例如: TSelf = Class Function Hello(self: TSelf); end; 然后,我尝试将接口应用于TSelf: ISelf = Interface(IInterface) Function Hello(self: TSelf) end; TSelf = Class(TInterfacedObject, IS

晚上好

我试图使用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吗?然后在方法中把它们扔给自己

在这方面的任何帮助都将不胜感激,因为它目前阻止我能够自动测试

或者,是否有一个不需要接口的模拟框架


谢谢。

您可以使用转发类声明

type
  TSelf = class;

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

  TSelf = Class(TInterfacedObject, ISelf)
    procedure Hello(ASelf: TSelf);
  end;
但在这种情况下,必须在同一类型声明部分中定义full
TSelf
类声明


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

这很有效,非常感谢。我给出的代码示例只是我头脑中的一个粗略示例,试图给出我试图实现的目标,但是,您的评论是正确的,我将在以后提出的任何问题中考虑它们。再次感谢!