Parent没有默认构造函数。必须显式定义默认构造函数

时间:2017-10-26 23:48:08

标签: c# unit-testing entity-framework-5 moq mstest

我正在编写单元测试用例来测试数据访问层。

我正在使用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")
        {}

0 个答案:

没有答案