无法让DbSet.Find与Moq一起使用(使用entity framework)

由于某种原因,此代码一直失败。 任何可以告诉我原因的人:

var activeLoans = new List { new ActiveLoan{ ID = 1, CaseType = "STL", LoanCode = 0 }, new ActiveLoan{ ID = 2, CaseType = "STL", LoanCode = 0 }, new ActiveLoan{ ID = 3, CaseType = "STL", LoanCode = 0 } }.AsQueryable(); var activeLoanMockSet = new Mock<DbSet>(); activeLoanMockSet.As<IQueryable>().Setup(m => m.Provider).Returns(activeLoans.Provider); activeLoanMockSet.As<IQueryable>().Setup(m => m.Expression).Returns(activeLoans.Expression); activeLoanMockSet.As<IQueryable>().Setup(m => m.ElementType).Returns(activeLoans.ElementType); activeLoanMockSet.As<IQueryable>().Setup(m => m.GetEnumerator()).Returns(activeLoans.GetEnumerator()); mockContext.Setup(c => c.ActiveLoans).Returns(activeLoanMockSet.Object); // This is the line that fails Assert.AreNotEqual(mockContext.Object.ActiveLoans.Find( 1 ), null); 

当我说失败时,我的意思是unit testing这是失败的一部分。

我想你还需要设置IDbSet :: Find 。

 activeLoanMockSet.Setup(m => m.Find(It.IsAny())) .Returns(ids => activeLoans.FirstOrDefault(d => d.ID == (int)ids[0]));