2014-03-28 35 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

相關問題