0
在我的單元測試中,需要設置一個模擬TList<T>
。我如何設置模擬TList<T>.count
屬性讀取的返回值?TList <T> .count利用Delphi Mocks模擬返回值
當我When
後使用count
編譯錯誤信息是:
[dcc32 Error] Unit1.pas(40): E2014 Statement expected, but expression of type 'Integer' found
當我When
編譯錯誤消息後使用getCount
是:
[dcc32 Error] Unit1.pas(40): E2003 Undeclared identifier: 'getCount'
的count
屬性讀取直接fCount
屬性。有沒有解決方法?
type
TMyClass = class
end;
procedure TXXXTestCase.testYYY;
var
mL : TMock<TList<TMyClass>>;
begin
mL := TMock<TList<TMyClass>>.create;
try
// ...
mL.Setup.WillReturn(1).When.Count;
// ...
finally
mL.Free;
end;
end;
除非您使用低級掛鉤,否則模擬「Count」值的唯一方法是將虛擬值添加到列表中。至於'When',它看起來像Mocks只能處理使用虛擬getter方法的屬性讀取(所以它可以掛鉤方法)。此外,像「MyList.Count;」這樣的語句在Delphi中無效(相同的編譯器錯誤)。您必須將您的「Count」檢查包裹在另一個與Mocks兼容的班級/方法中。 –
是的,我的想法是一樣的:使用getCount虛擬方法繼承TList或創建函數getListCount(aL_:TList):integer begin aL_.count;結束;方法在用戶類中。他們都是黑客。重構代碼只是爲了能夠測試。但不是正確的方向。 :( –
嘲笑一個列表是一個壞主意,只是把你想要它包含的值 –