1

我正在使用 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 参数的正确方法是什么?

4

1 回答 1

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 ,它将因访问冲突而失败,或者根本不执行任何操作(我怀疑是前者)。

于 2017-05-16T04:19:22.120 回答