Класс, который я выполняю Unit Testing, прокручивает каждую запись таблицы DB и суммирует значение в поле с предыдущим значением. Ниже приведен класс, сведенный к кости:Предоставление данных для Mock для модульного тестирования
procedure TSumList.Sum;
var
FSum:integer;
begin
FSum:=0;
FDB.First;
while not FDB.EOF do
begin
FSum:=FSum+FDB.GetAmount;
FDB.Next;
end;
end;
FDB относится к интерфейсу DB mock под названием IIDBTable.
Ниже БД насмешка для инъекций в зависимости:
IIDBTable = interface
['{A299D1D6-93AF-45CC-8DE2-9A4EE188C352}']
procedure First;
procedure Next;
function EOF : boolean;
function GetAmount:integer;
end;
TMockDBTable = class (TInterfacedObject,IDBTable)
procedure First;
procedure Next;
function EOF : boolean;
function GetAmount:integer;
end;
Проблема я не знаю, как предоставить данные в макет для теста. Конечно, я могу добавить дополнительную процедуру, например AddValues (aAmount: integer), которая выполняет эту работу, но в этом случае я тоже закончил бы эту дополнительную процедуру в производстве, и мне она не нужна.
Какова наилучшая практика для этого?
Я использую Spring для основы Delphi
Не хватает информации: как TSumList знает о IIDBTable? Кроме того: дополнительный метод может быть на TMockDBTable, а не на интерфейсе. Или вы можете просто передать данные в конструкторе TMockDBTable –
Вам нужно реализовать издевательскую функциональность в 'TMockDBTable'. Поскольку 'TMockDBTable' предоставляет реализацию' IDBTable', которая используется при тестировании, вы должны сделать так, чтобы 'TMockDBTable' получал макет данных. Я не понимаю, почему вы думаете, что вам нужно что-то добавить к вашему производственному коду. Вы не ставили «TMockDBTable» в свой производственный код? –