【发布时间】:2015-11-04 14:30:15
【问题描述】:
我有一个 moq 数据库,其中包含读取序列化实体的 json 文件并将它们反序列化为 moq dbset 的方法。当我设置 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.
这些是读取 json 文件并将其反序列化为 moq dbset 的方法:
public string LoadFile(string path)
{
return File.ReadAllText(path);
}
public List<T> GetData<T>(string path)
{
string json = LoadFile(path);
var dataList = JsonConvert.DeserializeObject<List<T>>(json);
return dataList;
}
public Mock<DbSet<T>> GetMockDbSet<T>(string path) where T : class
{
var data = GetData<T>(path).AsQueryable();
var mockSet = new Mock<DbSet<T>>();
mockSet.As<IQueryable<T>>().Setup(m => m.Provider).Returns(data.Provider);
mockSet.As<IQueryable<T>>().Setup(m => m.Expression).Returns(data.Expression);
mockSet.As<IQueryable<T>>().Setup(m => m.ElementType).Returns(data.ElementType);
mockSet.As<IQueryable<T>>().Setup(m => m.GetEnumerator()).Returns(data.GetEnumerator());
return mockSet;
}
当我在“return mockSet”对象中设置断点并打开结果视图时,数据存在,列表已正确填充,但如果我将光标移开然后返回并展开结果查看数据已消失,并显示“枚举未产生任何结果”。如果我什至没有移动断点,这怎么可能。我实际上只是扩展了结果视图以查看数据,将鼠标光标移开,然后在同一实例中重新钻入,数据就消失了。提供屏幕截图。
【问题讨论】:
-
您是否尝试过更改文件路径中的斜杠?即
@"Files\ObjectJson\StorageAreas.json"=>@"Files/ObjectJson/StorageAreas.json" -
@RDay 是的,我有,但无济于事。
标签: c# entity-framework unit-testing mocking moq