如何使用PascalMock返回var参数

时间:2017-05-15 02:23:13

标签: delphi pascalmock

我使用PascalMock(http://sourceforge.net/projects/pascalmock/)来模拟我的DUnit单元测试中的各种接口。

我熟悉如何处理参数和返回值,但我不了解如何编码var参数。

例如,如果TIniFile.ReadSections模拟接口版本,我试过:

procedure TIniFileMock.ReadSections(Strings: TStrings);
begin
  AddCall('ReadSections').WithParams([Strings]).ReturnsOutParams([Strings]);
end;

然后使用以下方式设置期望:

IniMock.Expects('ReadSections').WithParams([Null])
  .ReturnsOutParams([Sections]);

但是这并没有返回我已放入Sections的值。我尝试了各种其他排列,但显然我错过了一些东西。互联网上的例子似乎很少。

使用PascalMock返回var参数的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

您似乎误解了 TIniFile.ReadSections 的工作原理。

此方法的Strings参数不是 var 参数,而只是对象引用。

您需要传入对 TStrings 派生对象(通常是 TStringList 的实例)的引用。然后,该方法从INI文件中读取节名称,并将它们添加到您提供的 TStrings 对象中:

例如:

sections := TStringList.Create;
try
  ini.ReadSections(sections);

  // Do some work with the 'sections'
  // ..

finally
  sections.Free;
end;

有了这个澄清,我怀疑你需要改变你嘲笑INI文件的方法,当然还有你的期望,这是完全错误的。如果您使用 NIL 参数调用 ReadSections ,它将会因访问冲突而失败,或者什么都不做(我怀疑是前者)。