我使用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参数的正确方法是什么?
答案 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 ,它将会因访问冲突而失败,或者什么都不做(我怀疑是前者)。