related query multiple mock method lazy framework c# entity-framework moq

c# - query - No se puede hacer que DbSet.Find funcione con Moq(utilizando el Entity-Framework)



mock entity framework (1)

Por alguna razón este código sigue fallando. Cualquiera que me pueda decir por qué:

var activeLoans = new List<ActiveLoan> { 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<ActiveLoan>>(); activeLoanMockSet.As<IQueryable<ActiveLoan>>().Setup(m => m.Provider).Returns(activeLoans.Provider); activeLoanMockSet.As<IQueryable<ActiveLoan>>().Setup(m => m.Expression).Returns(activeLoans.Expression); activeLoanMockSet.As<IQueryable<ActiveLoan>>().Setup(m => m.ElementType).Returns(activeLoans.ElementType); activeLoanMockSet.As<IQueryable<ActiveLoan>>().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);

Cuando digo fallar, quiero decir que la prueba de unidad de la que esto forma parte falla.


Creo que también necesita configurar IDbSet::Find .

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