Как проверить содержимое параметров с Delphi Mocks Framework?
Я пытаюсь протестировать с помощью среды Delphi Mocks класс, который создает простые объекты значений и передает их сотруднику. Как проверить содержимое этих объектов?
Общая идея кода выглядит так:
TData = class
Code : string;
Field1 : string;
Field2 : string;
end;
IReceiver = interface
procedure Process(aData : TData);
end;
TSUTClass = class
public
procedure DoSomething(const aCode : string);
property Receiver : IReceiver;
end;
Поэтому, когда звонок DoSomething
сделан, TSUTClass
следует сделать несколько экземпляров TData
и передать их по одному Receiver.Process
, Я могу проверить, что правильный счет звонков сделан с этой настройкой:
Mock := TMock<IReceiver>;
Mock.Setup.Expect.Exactly('Process', ExpectedCount);
Но как проверить, если значения Field1
а также Field2
верны?
1 ответ
Макет имеет WillExecute
метод, в котором вы можете передать анонимный метод, который будет выполняться при вызове макета. Вы можете оценить пройденное TData
объекты. К сожалению, после быстрого просмотра кажется, что вы не можете объединить WillExecute
с ожидаемым количеством звонков.
С DSharp Mocks, который очень похож на Delphi Mocks, это будет выглядеть так:
var
mock: Mock<IReceiver>;
sut: TSUTClass;
callCount: Integer;
begin
sut := TSUTClass.Create(mock);
callCount := 0;
mock.Setup.WillExecute(
function(const args: TArray<TValue>; const ReturnType: TRttiType): TValue
var
data: TData;
begin
Inc(callCount);
data := args[0].AsType<TData>;
case callCount of
1:
begin
CheckEquals('xyz', data.Field1);
CheckEquals('abc', data.Field2);
end;
2: ///...
end;
end).Exactly(2).WhenCallingWithAnyArguments.Process(nil);
sut.DoSomething('x');
end;