Пересчет возвращаемого значения TList<T>.count с Delphi Mocks

В моем модульном тесте есть необходимость настроить макет TList<T>, Как я могу установить возвращаемое значение для издевательства TList<T>.count свойство читать?

Когда я использую count после When сообщение об ошибке компилятора:

[dcc32 Error] Unit1.pas(40): E2014 Statement expected, but expression of type 'Integer' found

Когда я использую getCount после When сообщение об ошибке компилятора:

[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;

1 ответ

Решение

ХОРОШО. Вдохновленный комментарием Стефана Глинке, я создал утилиту calss, чтобы избежать доступа к свойствам... объекта, который был подвергнут мошенничеству. Я просто передаю макет в макет служебного класса, чтобы получить (поддельное) значение.

Фрагмент кода выглядит как мой оригинальный:

value = object1.property.list.count;

Решение для этого глубокого внутреннего взгляда:

value = object1Utility.getListCount( object );

TObjec1tUtility вызывает Object2Utility для своего ответа, но в этом случае я могу смоделировать Object1Utility, нет необходимости добавлять макет в макет.

Другие вопросы по тегам