我的一个存储库类(例如PersonRepo)将一个委托作为其属性,如下所示
private readonly Func<INameRepo> _nameRepo;
除此之外,它是由一个类继承的,该类本身又需要一个对象(例如会话)。
因此,当我在测试中初始化它时,我会做类似
var funcNameRepo=autoMock.Mock<Func<INameRepo>>();
_personRepo= new PersonRepo(session,funcNameRepo.Object);
但是当我运行此测试时,出现以下错误:
Unable to cast object of type 'System.Func`1[Repositories.Interfaces.INameRepo]' to type Moq.IMocked`1[System.Func`1[Repositories.Interfaces.INameRepo]]'.
您认为我在这里做错了什么。请帮我。
最佳答案
为什么要模拟Func<INameRepo>
?如果要模拟INameRepo
,请为INameRepo
创建一个模拟,然后通过lambda(将是PersonRepo
)将其传递到Func<INameRepo>
。
var nameRepo = autoMock.Mock<INameRepo>();
_personRepo = new PersonRepo(session, () => nameRepo.Object);