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

Pra*_*ran 5 asp.net testing entity-framework moq

我正在使用实体框架数据库优先方法和生成的edmx文件。

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

这是我的代码

[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);

    }
Run Code Online (Sandbox Code Playgroud)

Parent does not have..在调用时遇到异常mockSet.Object

你能解决这个异常吗?

Dom*_*icz 1

从你给出的内容来看,我看不出你是如何使用Mock<DbSet<Application>>, 或Mock<ARMSContext>.

以下是 MSDN“使用模拟框架进行测试(EF6 及以上版本) ”给出的示例,它将连接DbSetContext

    [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);
    }
}
Run Code Online (Sandbox Code Playgroud)