xunitとMoqをasp.netコアで使用して単体テストを書きます。これはArticleに従っていますが、エラー:Asp.netコアでMoqを使用する問題:非仮想(VBでオーバーライド可能)の無効な設定
Invalid setup on a non-virtual (overridable in VB) member: m => m.Blogs
これは私が試したものです:
[Fact]
public void CreateBlog()
{
var mockDbSet = new Mock<DbSet<Blog>>();
var mockContext = new Mock<Context>();
mockContext.Setup(m => m.Blogs).Returns(mockDbSet.Object); //In this line i got error
var service = new BlogController(mockContext.Object);
service.AddBlog("ADO.NET Blog", "adtn.com");
mockDbSet.Verify(m => m.Add(It.IsAny<Blog>()), Times.Once());
mockContext.Verify(m => m.SaveChanges(), Times.Once());
}
は、これらは私のモデルクラスです:
public class Blog
{
public int BlogId { get; set; }
public string Name { get; set; }
public string Url { get; set; }
public virtual IList<Post> Posts { get; set; }
}
と:
public class Post
{
public int PostId { get; set; }
public string Title { get; set; }
public string Content { get; set; }
public DateTime RegisterDate { get; set; }
public int BlogId { get; set; }
public virtual Blog Blog { get; set; }
}
と、これは私のコントローラである:
public class BlogController : Controller
{
private readonly Context _context;
public BlogController(Context ctx)
{
_context = ctx;
}
[HttpPost]
public Blog AddBlog(string name, string url)
{
var blog = new Blog() { Name = name, Url = url };
_context.Blogs.Add(blog);
_context.SaveChanges();
return blog;
}
}
UPDATE:私は、仮想コンテキストにdbsetを作るが、それは別のエラーを与える:
Can not instantiate proxy of class: EntitFrameworkCore.Models.Context
問題が何でありますか?
エラーメッセージ: – Tseng
私は記事が言ったことをしているので、記事が間違っていますか? – pejman
コンテキストのBlogsプロパティは、仮想コンテキストである必要があります。 – Nkosi