我是一个依赖注入容器的新手,我正在尝试将它们与 Mocking 结合使用。
假设我有一个控制器和一个列表(模型):
IBlahList = interface
property Items[AIndex: integer]: IBlah read GetItem;
end;
IController = interface
property List: IBlahList read GetList;
end;
IController 的实现看起来像(注意,它在以下implementaion
部分:
implementation
TController = class (TInterfacedObject, IController)
private
FList: IBlahList;
function GetList: IBlahList;
public
constructor Create(const AList: IBlahList);
end;
然后,当然,我会注册这个类(以及 IBlahList 的一个)GlobalContainer
:
GlobalContainer.RegisterType<TController>.Implements<IController>;
implementation
根据各种来源的建议(好吧,无论如何,尼克霍奇斯!),我将 TController 放在该部分中,这样我们就不能直接引用 TController 类。
现在,只是说我想在单元测试中测试我的 ICollection 实现:
procedure TestSomething
var
LMockList: TMock<IBlahList>;
LController: IController;
begin
LMockList := TMock<IBlahList>.Create;
// Oops, I can't do this, I can't access TController
LController := TController.Create(LMockList);
end;
所以,我的问题是,我应该将 TController 类移到我的interface
部分中以便我可以测试它,还是有其他方法可以将模拟 IBlahList 传递给我尚未找到的控制器?