2015-12-04 85 views
0

所有,德尔福接口

我试图单元测试我的一些使用dUnit和PascalMock的Delphi代码。

有大量的遗留代码不能在所有的接口,还包含参数传递的对象本身,例如:

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

我已经然后试图申请一个自行宣布接口:

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

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

这显然然后失败,因为“自行宣布”是不确定的,这些都是与自行宣布使用作为参数的许多功能大的对象,是我唯一的经历和改变这些到TObject的选项?并在方法内将它们投射到TSelf?

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

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

谢谢。

回答

0

您可以使用正向类声明

type 
    TSelf = class; 

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

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

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

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

+0

这工作,非常感谢。 我给出的代码示例刚好在我的头顶,试图给出一个我想要实现的示例的粗略示例,但是,您的意见是正确的,我将把它们带入我将来的任何问题。 再次感谢! –