Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.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# 为什么我的moq db对象没有结果_C#_Entity Framework_Unit Testing_Mocking_Moq - Fatal编程技术网

C# 为什么我的moq db对象没有结果

C# 为什么我的moq db对象没有结果,c#,entity-framework,unit-testing,mocking,moq,C#,Entity Framework,Unit Testing,Mocking,Moq,我有一个moq数据库,其中包含读取序列化实体的json文件并将其反序列化为moqdbset的方法。设置dbcontext时,一个表具有所有预期结果,而另一个表具有0个结果。我的Json文件格式正确,经过验证,有5个条目 var airportLocationMoq = GetMockDbSet<Repository.Location>(@"Files/ObjectJson/Airports.json"); var storageAreaMoq = GetMockDbS

我有一个moq数据库,其中包含读取序列化实体的json文件并将其反序列化为moqdbset的方法。设置dbcontext时,一个表具有所有预期结果,而另一个表具有0个结果。我的Json文件格式正确,经过验证,有5个条目

    var airportLocationMoq = GetMockDbSet<Repository.Location>(@"Files/ObjectJson/Airports.json");
    var storageAreaMoq = GetMockDbSet<Repository.StorageArea>(@"Files/ObjectJson/StorageAreas.json");
    var dbContext = new Mock<DbContext>();
    dbContext.Setup(x => x.Locations).Returns(airportLocationMoq.Object);
    dbContext.Setup(x => x.StorageAreas).Returns(storageAreaMoq.Object);

    var airportsFromDb = dbContext.Object.Locations.Where(x => x.Type == 1).ToList();
    var storageAreasFromDb = dbContext.Object.StorageAreas.ToList(); //<-this results in 0 entries however there should be 5.
var airportLocationMoq=GetMockDbSet(@“Files/ObjectJson/Airports.json”);
var storageAreaMoq=GetMockDbSet(@“Files/ObjectJson/StorageAreas.json”);
var dbContext=new Mock();
Setup(x=>x.Locations).Returns(airportLocationMoq.Object);
Setup(x=>x.StorageAreas).Returns(storageAreaMoq.Object);
var airportsFromDb=dbContext.Object.Locations.Where(x=>x.Type==1.ToList();
var storageAreasFromDb=dbContext.Object.StorageAreas.ToList();//m、 提供程序),返回(data.Provider);
mockSet.As().Setup(m=>m.Expression).Returns(data.Expression);
mockSet.As().Setup(m=>m.ElementType).Returns(data.ElementType);
mockSet.As().Setup(m=>m.GetEnumerator()).Returns(data.GetEnumerator());
返回模拟集;
}
当我将断点插入“return mockSet”对象并打开“结果”视图时,数据已存在,列表已正确填充,请在此处输入图像描述。但是,如果我将光标移开,然后返回并展开“结果”视图,则数据将随“枚举未产生结果”一起消失。如果我甚至没有移动断点,这怎么可能呢。在同一个实例中,我只是简单地扩展了结果视图以查看数据,将鼠标光标移开,然后重新钻入,数据就消失了。提供了屏幕截图


实际问题在于模拟的初始化方式

mockSet.As<IQueryable<T>>().Setup(m => m.GetEnumerator()).Returns(data.GetEnumerator());

我最初关于显式
IEnumerable
实现的假设是错误的

DbSet
类没有任何
ToList()
方法。转化
DbSet
IEnumerable.ToList()方法设置为
用过

接口
IEnumerable
DbSet
类实现 . 所以我认为,您需要设置
Mock
即使对于
IEnumerable
接口

mockSet.As<IEnumerable<T>>().Setup(m => m.GetEnumerator()).Returns(data.GetEnumerator());
mockSet.As().Setup(m=>m.GetEnumerator()).Returns(data.GetEnumerator());

您是否尝试过更改文件路径中的斜杠?i、 e.
@“Files\ObjectJson\StorageAreas.json”
=>
@“Files/ObjectJson/StorageAreas.json”
@RDay是的,但没有用。我也添加了这一点,但它无法解决问题。问题是,当我在Dbset方法中设置断点并返回到return mockset时,数据是存在的,如果我移开鼠标移动器,然后返回到其中,则列表为空,说明“枚举未产生结果”,而一秒钟前结果视图中满是条目。它如何包含数据,然后在不实际移动断点的情况下删除数据?@Theakhemit请查看更新的答案。问题出现在
Mock
设置中。是!成功了!卢卡斯卡伯特先生,你是国王!非常感谢。你是我今天的英雄,谢谢@Lukas为此搜索了数小时。衷心感谢你。我不知道为什么这是真的
一旦枚举了项,枚举器就不会为后续调用生成更多的结果。
但是您的解决方案是有效的!我以为我疯了,现在数据在这里,我再看一眼,它就不见了。谢谢
mockSet.As<IQueryable<T>>()
    .Setup(m => m.GetEnumerator()).Returns(() => data.GetEnumerator());
mockSet.As<IEnumerable<T>>().Setup(m => m.GetEnumerator()).Returns(data.GetEnumerator());