我正在使用PascalMock(http://sourceforge.net/projects/pascalmock/(来模拟DUnit单元测试中的各种接口。
我熟悉如何处理参数和返回值,但不了解如何编写 var 参数。
例如,为了模拟接口版本,如果TIniFile.ReadSection,我已经尝试过:
procedure TIniFileMock.ReadSections(Strings: TStrings);
begin
AddCall('ReadSections').WithParams([Strings]).ReturnsOutParams([Strings]);
end;
,然后使用以下方法设置期望:
IniMock.Expects('ReadSections').WithParams([Null])
.ReturnsOutParams([Sections]);
但这并没有返回我放入部分中的值。我已经尝试了各种其他排列,但显然我错过了一些东西。互联网上的例子似乎很少。
使用 PascalMock 返回 var 参数的正确方法是什么?
你似乎误解了TIniFile.ReadSection的工作原理。
此方法的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 参数调用 ReadSection,它要么因访问冲突而失败,要么干脆什么都不做(我怀疑是前者(。