Delphi Mocks устанавливает несколько возвращаемых значений для функции с аргументами TValue

Я использую Delphi Mocks для создания заглушки для функции, которая принимает TValue в качестве параметра и возвращает TValue. Когда я использую настройку для функции и передаю ряд параметров для возврата конкретных результатов, я получаю следующую ошибку:

EMockExceptionError [ItestClass] already defines Will Return When for method [convert].

Если я изменю все параметры и результаты на строковый тип, он будет работать как надо.

Я не уверен, выходит ли это за рамки возможностей Delphi Mocks или есть другой способ добиться этого. Пример кода ниже для воспроизведения проблемы

program Project1;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils,
  System.Rtti,
  Delphi.Mocks
  ;

type
  ITestClass = interface (IInvokable)
    ['{BF0B2C18-369D-4AAB-B688-079B3CBFE892}']
    Function Convert(AValue : TValue) : TValue;
  end;

  TTestClass = class(TInterfacedOBject)
    Function Convert(AValue : TValue) : TValue;
  end;

  TConsumer = class
  private
    FTest : ITestClass;
  public
    Property Test : ITestClass read FTest write FTest;
    Procedure RunTest;
  end;

var
  AMock : TMock<ITestClass>;
  AConsumer : TConsumer;

{ TConsumer }

procedure TConsumer.RunTest;
var
  AOutput : string;
begin
  AOutput := FTest.Convert('One').AsString;
  writeln(AOutput);
  AOutput := FTest.Convert('Two').AsString;
  writeln(AOutput);
  AOutput := FTest.Convert('Three').AsString;
  writeln(AOutput);
end;

{ TTestClass }

function TTestClass.Convert(AValue: TValue) : TValue;
begin
  Result := '';
end;

begin
  try
     AMock := TMock<ITestClass>.Create;
     AMock.Setup.WillReturn('ConvOne').When.Convert('One');
     AMock.Setup.WillReturn('ConvTwo').When.Convert('Two');
     AMock.Setup.WillReturn('ConvThree').When.Convert('Three');
     AConsumer := TConsumer.Create;
     AConsumer.Test := AMock;
     AConsumer.RunTest;
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
  Readln;
end. 

0 ответов

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