2010-08-27 75 views
1

我正在使用NerdDinner的模式。我在我的測試方法中調用Index(),並且我返回的ViewREsult沒有數據。所以變量數據結束爲空。ViewResult返回無數據

但是,我知道那裏有數據。因爲我可以去觀察窗口並展開變量結果並展開viewData-> Model-> ResultsView然後我會看到「將會展開結果視圖將列舉IEnumerable」當我展開它時,數據就存在。

任何想法爲什麼數據會返回爲空,除非我展開?

感謝 雅

[TestMethod] 
    public void Index__Should_Return_1_or_More_lessons() 
    { 
     var controller = new LessonController(new FakeLessonRepository()); 

     var result = controller.Index() as ViewResult; 

     var data = result.ViewData.Model as IList<Lesson>; 
     Assert.IsTrue(data.Count > 0); 
    } 

回答

1

這是因爲在LINQ的或EF Lazy Loading(取決於你使用的)需要時查詢纔會執行。你可以通過調用ToList()或ToArray()等類似的終結器來強制執行它。

+0

嗯不知道如何到ViewResult的ToArray或ToList方法...任何想法? – Jas 2010-08-27 14:39:14

+0

'var data =((IList )result.ViewData.Model).ToList();'應該可以正常工作 – Buildstarted 2010-08-27 14:48:20

+0

謝謝! var data =((EnumerableQuery )result.ViewData.Model).ToList(); 做到了。 – Jas 2010-08-27 21:14:52