模拟类的Func属性

时间:2010-08-03 16:47:31

标签: c# unit-testing mocking automocking

我的一个存储库类(比如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]]'.
你认为我在这里做错了什么?请帮我。

1 个答案:

答案 0 :(得分:3)

为什么嘲笑Func<INameRepo>?如果您想模拟INameRepo,请为INameRepo创建一个模拟,并通过lambda(将是PersonRepo)将其传递给您的Func<INameRepo>

var nameRepo = autoMock.Mock<INameRepo>();
_personRepo = new PersonRepo(session, () => nameRepo.Object);