如何模拟存储库以用作Controller的参数?

And*_*and 5 c# asp.net-mvc unit-testing entity-framework moq

我正在使用Entity Framework 6为C#MVC5项目构建单元测试.我正在尝试使用Moq模拟我的BlogRepository,然后将其用作我试图测试的BlogController的参数.我实际上单元测试工作正常,但为了做到这一点,我创建了一个Fake BlogRepository类,当我更愿意使用Moq来解决它.

我得到的问题是Controller希望参数是IBlogRepository类型,但只是将其视为模拟.所以我得到一个无效的参数错误.我认为这就是它的用法.

这是我尝试创建模拟:

Mock<IBlogRepository> blogRepo = new Mock<IBlogRepository>();
blogRepo.Setup(t => t.GetBlogByID(It.IsAny<int>())).Returns<Blog>(blog => new Blog());
Run Code Online (Sandbox Code Playgroud)

这是控制器的开始:

public class BlogController : Controller
{
    IBlogRepository blogRepo;

    public BlogController(IBlogRepository repoBlog)
    {
        blogRepo = repoBlog;
    }
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?或者我在这里得到了错误的想法.任何帮助,将不胜感激.谢谢.

Ole*_*kyi 5

你应该通过blogRepo.ObjectblogRepo给您的控制器.

  • 谢谢,这很棒.我简直不敢相信.我想我今天已经盯着代码太久了. (2认同)