我正在编写单元测试用例来测试数据访问层。
我正在使用Moq 4.7.10
我使用EF5
以下是我创建模拟上下文的代码
Mock<DbSet<T>> MockContextQuery<T>(IQueryable<T> data) where T : class
{
var mockSet = new Mock<DbSet<T>>(); //this line doesnt create mock object of DBSet
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());
mockSet.Setup(x => x.Include(It.IsAny<string>())).Returns(mockSet.Object);
return mockSet;
}
这是我创建使用上述方法的方法
var sampleData = new List<foo>()
{
new foo()
{
URL = "https://www.bing.com",
ID = 1,
IsDeleted = false
},
new foo()
{
URL = "https://www.yahoo.com",
ID = 2,
IsDeleted = false
}
};
var data = sampleData.AsQueryable();
var mockSet = MockContextQuery(data);
dbContextMock.Setup(x => x.Foos).Returns(mockSet.Object); //this line throws error
我不知道这里有什么不对。 是不是EF5不支持嘲笑DBSet?
编辑:datacontext
public class MyDBContext: DbContext
{
public MyDBContext()
: base("connectionstring")
{}