我尝试使用NUnit和Moq的单元测试服务,它访问数据。我创建的DbContext的模拟像这样:EF模拟不使用预先加载
我的实体和上下文
public class BloggingContext : DbContext
{
public virtual DbSet<Blog> Blogs { get; set; }
public virtual DbSet<Post> Posts { get; set; }
}
public class Blog
{
public int BlogId { get; set; }
public string Name { get; set; }
public string Url { get; set; }
public virtual List<Post> Posts { get; set; }
}
public class Post
{
public int PostId { get; set; }
public string Title { get; set; }
public string Content { get; set; }
public int BlogId { get; set; }
public virtual Blog Blog { get; set; }
}
测试方法:
public void CreateBlog_saves_a_blog_via_context()
{
var data = new List<Blog>
{
new Blog { Name = "BBB" },
new Blog { Name = "ZZZ" },
new Blog { Name = "AAA" },
}.AsQueryable();
var data2 = new List<Blog>
{
new Post{ Title= "BBB" },
new Post{ Title= "ZZZ" },
new Post{ Title= "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 mockSet2 = new Mock<DbSet<POs>>();
mockSet2.As<IQueryable<Blog>>().Setup(m => m.Provider).Returns(data2.Provider);
mockSet2.As<IQueryable<Blog>>().Setup(m => m.Expression).Returns(data2.Expression);
mockSet2.As<IQueryable<Blog>>().Setup(m => m.ElementType).Returns(data2.ElementType);
mockSet2.As<IQueryable<Post>>().Setup(m => m.GetEnumerator()).Returns(data2.GetEnumerator());
var mockContext = new Mock<BloggingContext>();
mockContext.Setup(c => c.Blogs).Returns(mockSet.Object);
mockContext.Setup(c => c.Posts).Returns(mockSet2.Object);
var service = new BlogService(mockContext.Object);
var blogs = service.GetAllBlogs();
}
但当我不会设置实体之间的关系我测试他们
Post = new Post(){
Title ="",
Content = "",
BlogID = 2
};
但导航性能测试(在正常设置其设置)没有设置。当我尝试从上下文中阅读这篇文章时,我总是有null,但BlogID已经设置。
我认为你有一个复制粘贴错误的AR数据2 =新名单 应张贴正确的吗? –
你在博客收集新的博客设置{名称=“BBB”,帖子=新名单(){新邮{标题=“BBB”},...... }}, –