【问题标题】:Chaining methods with Moq使用 Moq 的链接方法
【发布时间】:2015-07-30 19:05:28
【问题描述】:

我正在尝试使用 Moq 模拟和设置链式方法。

这是我要模拟的方法:

TeamMember teamMember = _unitOfWork
    .TeamMembers
    .Query()
    .ToList()
    .Where(t => t.AssociationCode.ToString() == code 
        && Crypto.EncryptStringAES(t.Id.ToString(), sharedSecret) == hash)
    .SingleOrDefault();

这是我试图模拟它的地方:

var unitOfWorkMock = new Mock<IUnitOfWork>();
var iQueryableMock = new Mock<IQueryable<TeamMember>>();
var iToListMock = new Mock<List<TeamMember>>();
var whereMock = new Mock<IList<TeamMember>>();
var singleMock = new Mock<IEnumerable<TeamMember>>();

unitOfWorkMock
    .Setup(u => u.TeamMembers
        .Query())
        .Returns(iQueryableMock.Object);

iQueryableMock
    .Setup(i => i.ToList())
        .Returns(iToListMock.Object); //This line throws the error

whereMock
    .Setup(w =>
            w.Where(It.IsAny<Func<TeamMember, bool>>()))
        .Returns(singleMock.Object);

singleMock
    .Setup(s =>
            s.SingleOrDefault())
        .Returns(new TeamMember()
        {
            Email = "Test@TeamMember.com"
        });

当我运行这个测试时,它给了我这个错误:

表达式引用了不属于模拟对象的方法:i =&gt; i.ToList&lt;TeamMember&gt;()

我已经看过this question 并尝试做类似的事情,但我一定错过了一些东西。

我是新手,所以如果有人可以帮助我,将不胜感激。

【问题讨论】:

    标签: c# unit-testing mocking moq


    【解决方案1】:

    您的方法链模拟看起来不错,但您的问题是ToListextension method,而Moq cannot mock

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多