Как проверить содержимое параметров с 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;
Другие вопросы по тегам