Moq没有返回我设置的值

时间:2013-09-20 17:30:24

标签: c# linq-to-entities moq

我是Moq的新手。我正在尝试设置我的存储库以在调用时返回一个值:

我的测试方法:

 _userServiceMock.Setup(m => m.GetUserIDByUserName(It.IsAny<string>())).Returns(2);
 _bidRepositoryMock.Setup(m => m.Match(It.IsAny<Func<IQueryable<Bid>, object>>(),
                        It.IsAny<Expression<Func<Bid, object>>[]>())).Returns(new Bid{UserId = 2});
 var service = SetupService();
 var result = service.GetOwnBid(1, "testuser");

userServiceMock返回2,但bidRepositoryMock返回null。

方法我单元测试如下:

  var bid = _bidRepository.Match(userBid => userBid.SingleOrDefault(b => b.ID == id),
                b => b.UserProfile,
                b => b.Task.UserProfile);

和BidRepository方法匹配如下所示:

TResult Match<TResult>(Func<IQueryable<T>, TResult> query, params Expression<Func<T, object>>[] includes);

1 个答案:

答案 0 :(得分:1)

尝试将此代码从It.IsAny<Func<IQueryable<Bid>, object>>()更改为It.IsAny<Func<IQueryable<Bid>, Bid>>()

_bidRepositoryMock.Setup(m => m.Match(It.IsAny<Func<IQueryable<Bid>, Bid>>(),
                        It.IsAny<Expression<Func<Bid, object>>[]>())).Returns(new Bid{UserId = 2});

因为您的方法在查询中返回TResult类型,所以它将是Bid类型。