晚上好,
我正在尝试使用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?
对此的任何帮助将不胜感激,因为它目前阻止我能够自动测试。
或者是否有一个不需要界面的模拟框架?
谢谢。
答案 0 :(得分:0)
您可以使用前瞻性声明
type
TSelf = class;
ISelf = Interface
procedure Hello(ASelf: TSelf);
end;
TSelf = Class(TInterfacedObject, ISelf)
procedure Hello(ASelf: TSelf);
end;
但是在这种情况下,必须在相同的类型声明部分中定义完整的TSelf
类声明。
另外注意,使用self
作为参数名称会令人困惑,并且无法编译该代码,以及没有结果类型的函数。