2015-12-04 116 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

這工作,非常感謝。 我給出的代碼示例剛好在我的頭頂,試圖給出一個我想要實現的示例的粗略示例,但是,您的意見是正確的,我將把它們帶入我將來的任何問題。 再次感謝! –