我的一个存储库类(例如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);

07-26 07:03