我正在使用 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/