Есть ли соответствующая функция Spring4D для WillReturnDefault - PullRequest
2 голосов
/ 03 июня 2019

Delphi-Mocks имеет метод WillReturnDefault, когда вам не нужны параметры функции. Я не могу понять, как это сделать с Spring4D насмешкой . Благодарен за помощь!

1 Ответ

1 голос
/ 06 июня 2019

Вы либо используете макет в его динамическом режиме по умолчанию, где он разрешает любой вызов и просто возвращает значения по умолчанию из своих методов, либо используете сопоставления параметров - см. Следующий пример:

uses
  Spring.Mocking;

type
  {$M+}
  ITest = interface
    function GiveNumber(const s: string): Integer;
  end;

var
  m: Mock<ITest>;
begin
  // mocks are dynamic by default so they let all calls happen and return the default
  Writeln(m.Instance.GiveNumber(''));

  // parameter matcher can be either applied to the When call -
  // here we are using the built-in Args.Any to let any parameter happen
  // the actual values passed to GiveNumber does not matter then
  m.Setup.Returns(42).When(Args.Any).GiveNumber('');
  Writeln(m.Instance.GiveNumber('whatever'));

  // when specifying a specific param matcher you basically add this to the existing behavior
  // when calling the mock checks for any given behavior that matches starting from the
  // most recently defined
  m.Setup.Returns(77).When.GiveNumber(Arg.IsEqual('this'));
  Writeln(m.Instance.GiveNumber('this')); // 77 as we just specified
  Writeln(m.Instance.GiveNumber('something')); // 42 as we specified before for any arguments

  // so you should always start with the broader matcher and then the more specific ones
  // as a broader one would "override" a more specific one as you can see now
  m.Setup.Returns(42).When(Args.Any).GiveNumber('');
  // we get 42 now as the Args.Any matcher was added last and matches the parameter
  Writeln(m.Instance.GiveNumber('this'));

  Readln;
end.
...