我目前正在开始进行单元测试和模拟,我偶然发现了以下方法,我似乎无法为其制造一个有效的模拟实现:
function GetInstance(const AIID: TGUID;
out AInstance;
const AArgs: array of const;
const AContextID: TImplContextID = CID_DEFAULT): Boolean;
(TImplContextID
只是整数的类型别名)
这是我走了多远:
function TImplementationProviderMock.GetInstance(
const AIID: TGUID;
out AInstance;
const AArgs: array of const;
const AContextID: TImplContextID): Boolean;
var
lCall: TMockMethod;
begin
lCall := AddCall('GetInstance').WithParams([@AIID, AContextID]);
Pointer(AInstance) := FindVarData(lCall.OutParams[0]).VPointer;
Result := lCall.ReturnValue;
end;
但我无法弄清楚我应该如何模拟 open array parameter AArgs
。有任何想法吗?
此外,是否有一种更简单的方法来返回out
-parameterAInstance
并使用@
-notation 作为TGUID
-typed 参数(本质上是记录,即值类型)的正确方法?
是否可以使用当前版本的 PascalMock 来模拟此方法?
更新 2:为了清楚起见,我现在删减了问题文本。最初它包含以下模拟方法的错误实现,这是梅森的回复所指的:
function TImplementationProviderMock.GetInstance(
const AIID: TGUID;
out AInstance;
const AArgs: array of const;
const AContextID: TImplContextID): Boolean;
begin
Result := AddCall('GetInstance')
.WithParams([@AIID, AContextID])
.ReturnsOutParams([AInstance])
.ReturnValue;
end;
在此编译器抱怨.ReturnsOutParams([AInstance])
说“变量类型数组构造函数中的参数类型错误。”。