2014-03-28 34 views
4

我正在为使用Entity Framework 6的C#MVC5项目构建单元测试。我试图用Moq来模拟我的BlogRepository,然后将其用作我尝试测试的BlogController的参数。实际上我的单元测试工作正常,但为此,我创建了一个Fake BlogRepository类,当时我非常想知道如何使用Moq来完成它。如何模拟库用作控制器的参数?

我得到的问题是,控制器希望参数是IBlogRepository类型,但只能将其视为模拟。所以我得到一个无效的参数错误。我认为这是它是如何被使用的。

,这里是我创造的模拟尝试:

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

这里是控制器的开头:

public class BlogController : Controller 
{ 
    IBlogRepository blogRepo; 

    public BlogController(IBlogRepository repoBlog) 
    { 
     blogRepo = repoBlog; 
    } 

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

+0

'IBlogRepository blogRepo' ...'IBlogRepository repoBlog' ...'blogRepo = repoBlog'您可能想考虑ReSharper的私人成员的命名约定,因此您不需要两次命名相同的事物。 –

回答

5

您应该将blogRepo.Object而不是blogRepo传递给您的控制器。

+2

谢谢,那太好了。我不能相信我错过了这一点。想想今天我一直在盯着代码太久。 – AndrewPolland

相关问题