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.