Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法获取DbSet.Find以使用Moq(使用实体框架)_C#_Entity Framework_Moq - Fatal编程技术网

C# 无法获取DbSet.Find以使用Moq(使用实体框架)

C# 无法获取DbSet.Find以使用Moq(使用实体框架),c#,entity-framework,moq,C#,Entity Framework,Moq,由于某种原因,此代码一直失败。任何人都可以告诉我原因: var activeLoans = new List<ActiveLoan> { new ActiveLoan{ ID = 1, CaseType = "STL", LoanCode = 0 }, new ActiveLoan{

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

        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);
var activeLoans=新列表{
新活跃贷款{
ID=1,
CaseType=“STL”,
LoanCode=0
},
新活跃贷款{
ID=2,
CaseType=“STL”,
LoanCode=0
},
新活跃贷款{
ID=3,
CaseType=“STL”,
LoanCode=0
}
}.AsQueryable();
var activeLoanMockSet=new Mock();
activeLoanMockSet.As().Setup(m=>m.Provider).Returns(activeLoans.Provider);
设置(m=>m.Expression).Returns(activeLoans.Expression);
activeLoanMockSet.As().Setup(m=>m.ElementType).Returns(activeLoans.ElementType);
设置(m=>m.GetEnumerator())。返回(activeLoans.GetEnumerator());
Setup(c=>c.ActiveLoans).Returns(activeLoanMockSet.Object);
//这是失败的路线
Assert.arnotequal(mockContext.Object.ActiveLoans.Find(1),null);

当我说失败时,我的意思是这是其中一部分的单元测试失败。

我认为您还需要设置

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

您还需要设置
FindAsync
,我知道这已经有几年历史了,但我希望您能解释这个答案是如何工作的,因为IDbSt.Find链接解释不了多少。
activeLoanMockSet.Setup(m => m.Find(It.IsAny<object[]>()))
    .Returns<object[]>(ids => activeLoans.FirstOrDefault(d => d.ID == (int)ids[0]));