2011-11-30 79 views
2

在這一點上,我已經無法在樹林中迷失了,我一直在反覆地做出同樣的改變,認爲intellisense只是隱藏了我的東西。嘲笑存儲庫返回列表

我試圖創建一個模擬回購測試添加(和查詢)單個類型和列表。單個回購正在作爲:

public Mock<IBaseRepository<DNS_Entity>> RepositoryFakeObject() 
    { 
     var _dns = new List<DNS_Entity>(); 
     var mock = new Mock<IBaseRepository<DNS_Entity>>(); 

     mock.Setup(x => x.Add(It.IsAny<DNS_Entity>())) 
      .Callback((DNS_Entity e) => _dns.Add(e)); 

     mock.Setup(x => x.SelectALL()).Returns(_dns.AsQueryable()); 
     return mock; 
    } 

但是,我嘗試做一個類似的列表只是不工作。具體來說,安裝程序中的回報正在嘲笑我。

我在這一點的是:

public Mock<IBaseRepository<List<DNS_Entity>>> RepositoryFakeList() // Mock<IBaseRepository<List<DNS_Entity>>> 
    { 
     var _dns = new List<DNS_Entity>(); 
     var mock = new Mock<IBaseRepository<List<DNS_Entity>>>(); 

     mock.Setup(x => x.Add(It.IsAny<List<DNS_Entity>>())) 
      .Callback((List<DNS_Entity> le) => _dns.Add(le.Select(e => e) as DNS_Entity)); 

     // mock.Setup(x => x.SelectALL()).Returns((IQueryable<List<DNS_Entity>>) (_dns)); 

     mock.Setup(x => x.SelectALL()).Returns(_dns.AsQueryable()); 
     return mock; 

    } 

最後,我想做點什麼就像一個附加的測試:

[Test] 
    public void AddNewList() 
    { 
     var mock = RepositoryFakeList(); 

     var lst = new List<DNS_Entity> 
         { 
          new DNS_Entity {FirstName = "added", LastName = "From Test"}, 
          new DNS_Entity {FirstName = "added2", LastName = "From Test2"} 
         }; 

     mock.Object.Add(lst); 

     Assert.IsTrue(mock.Object.SelectALL().Count() == 2); 
    } 

缺少什麼我在這裏?我以前從未嘲笑過這樣的回購,所以我可能違反了一些基本原則,如果有的話,請讓我知道。

謝謝。

回答

4

我認爲這個問題是這一行

.Callback((List<DNS_Entity> le) => _dns.Add(le.Select(e => e) as DNS_Entity)); 

當您使用Select它返回一個IEnumerable<DNS_ENTITY>但你也鑄造DNS_ENTITY這將導致null

試...

.Callback((List<DNS_Entity> le) => _dns.AddRange(le)); 
+0

今天你是我的英雄,並得到一頂帽子。做得好。我也改變了返回類型,只是模仿>(no List <>)就是這樣。乾杯! – BryanGrimes

+0

啊,當然也是,不用擔心 – aqwert