通过这些声明:
type
IMyIfc = interface(IInvokable)
['{11D3AAF1-7A3E-45CA-9FB4-090010A29FC5}']
function Test: integer;
end;
IMySecondIfc = interface(IInvokable)
['{3360E5DB-6EDD-4F6E-A8C5-B2FB0ED7C0CD}']
function GetTestProp: IMyIfc;
procedure SetTestProp(const Value: IMyIfc);
property TestProp: IMyIfc read GetTestProp write SetTestProp;
end;
我尝试了以下操作,在标记的行上出错:
var
myIfcMock: Mock<IMyIfc>;
mySecondIfcMock: Mock<IMySecondIfc>;
mySecondIfc: IMySecondIfc;
testIfc: IMyIfc;
myIfcMock.Setup.Returns(5).When.Test;
mySecondIfcMock.Setup.Returns(myIfcMock).When.TestProp;
mySecondIfc := mySecondIfcMock;
testIfc := mySecondIfc.TestProp; // EConvertError with message 'Mock<Unit1.IMyIfc> cannot be converted to IMyIfc'
ShowMessage(testIfc.Test.ToString);
这看起来很奇怪,因为mock在某种程度上实现了接口。我也找不到解决这个问题的办法。我会感激你的任何提示。
1条答案
按热度按时间olmpazwi1#
这是在这一行使用类型推断的结果:
编译器实际上将其解释为:
尽管你的意思是
当使用1.2时,这实际上是您需要编写的类型转换(事实上,没有,因为类型已经匹配)。
在2.0(development)中,
Mock<T>
->T
的转换已经实现,所以你可以在那里使用类型推断。