asp.net - Moq Parent 没有默认构造函数。默认构造函数必须显式定义

标签 asp.net entity-framework testing moq

我正在使用 Entity Framework 数据库优先方法并生成 edmx 文件。

我正在尝试使用 MOQ 框架实现 enter code here 单元测试。

这是我的代码

[TestMethod]
    public void DeleteApplication()
    {
        var mockContext = new Mock<ARMSContext>();
        var data = GetMemoryApplications();
        var mockSet = new Mock<DbSet<Application>>();
        mockSet.As<IQueryable<Application>>().Setup(m => m.Provider).Returns(data.Provider);
        mockSet.As<IQueryable<Application>>().Setup(m => m.Expression).Returns(data.Expression);
        mockSet.As<IQueryable<Application>>().Setup(m => m.ElementType).Returns(data.ElementType);
        mockSet.As<IQueryable<Application>>().Setup(m => m.GetEnumerator()).Returns(data.GetEnumerator());

        var test=appcontroller.Delete(1, 1);

    }

我在调用 mockSet.Object 时收到 Parent does not have.. 异常。

你能解决这个异常吗?

最佳答案

根据您提供的内容,我看不出您是如何使用 Mock<DbSet<Application>> 的, 也不 Mock<ARMSContext> .

这是 MSDN“Testing with a mocking framework (EF6 onwards)”给出的示例,它 Hook 了 DbSet直到 Context :

    [TestMethod]
    public void GetAllBlogs_orders_by_name()
    {
        var data = new List<Blog>
        {
            new Blog { Name = "BBB" },
            new Blog { Name = "ZZZ" },
            new Blog { Name = "AAA" },
        }.AsQueryable();

        var mockSet = new Mock<DbSet<Blog>>();
        mockSet.As<IQueryable<Blog>>().Setup(m => m.Provider).Returns(data.Provider);
        mockSet.As<IQueryable<Blog>>().Setup(m => m.Expression).Returns(data.Expression);
        mockSet.As<IQueryable<Blog>>().Setup(m => m.ElementType).Returns(data.ElementType);
        mockSet.As<IQueryable<Blog>>().Setup(m => m.GetEnumerator()).Returns(data.GetEnumerator());

        var mockContext = new Mock<BloggingContext>();
        mockContext.Setup(c => c.Blogs).Returns(mockSet.Object);

        var service = new BlogService(mockContext.Object);
        var blogs = service.GetAllBlogs();

        Assert.AreEqual(3, blogs.Count);
        Assert.AreEqual("AAA", blogs[0].Name);
        Assert.AreEqual("BBB", blogs[1].Name);
        Assert.AreEqual("ZZZ", blogs[2].Name);
    }
}

关于asp.net - Moq Parent 没有默认构造函数。默认构造函数必须显式定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24014390/

相关文章:

c# - Entity Framework 6 w/DatabaseGenerateOption.Compulated : column does not allow nulls. INSERT 失败

Facebook Api - 本地开发、Testserver、Liveserver ...如何?

r - 支持向量机训练插入符错误 kernlab 类概率计算失败;返回 NA

c# - 为什么我们需要 Http 处理程序?

asp.net - 远程加载 extJS 组合不起作用

asp.net ValidateRequest=false 每个文本框而不是每个页面?

javascript - JS 中的 RSACryptoServiceProvider 等效项

c# - 将多个类映射到单个实体

c# - 表达式转换

c++ - C/C++ 有哪些突变测试框架?