2011-12-27 126 views
0

我有從公認的源下面的示例控制器代碼:簡單的MVC ASP.Net測試

public class HomeController : Controller 
{  
    MyStoreEntities storeDB = new MyStoreEntities(); 

    public ActionResult Index() 
    {  
     var albums = GetTopSellingAlbums(5);  
     return View(albums); 
    } 

    private List<Album> GetTopSellingAlbums(int count) 
    {    
     return storeDB.Albums 
      .OrderByDescending(a => a.OrderDetails.Count()) 
      .Take(count) 
      .ToList(); 
    } 
} 

我想寫一個非常簡單的測試來檢查5張專輯從指數()方法返回。

我覺得像這樣的事情可能做到這一點:

HomeController controller = new HomeController(); 
var result = controller.Index() as ViewResult; 
var albums = (List<Album>)result.ViewData; 
Assert.AreEqual(5, albums.Count); 

但model.Count()的值始終爲0

首先,我缺少的東西 - 這可能?

其次,我正在學習圍繞遺留代碼的很多原理。我有這個代碼,我知道這個代碼可以被嚴重改進。它也沒有測試。

我的計劃是用測試覆蓋現有的代碼,並認真編寫代碼。

因此,請不要在這裏或那裏做出反應,比如'不好的做法',或者實施這個層或那些模式等,因爲這些會在以後出現。

只是爲了測試上面的代碼將真正幫助請:)

甚至好博客或者書也將是有益的最簡單的方法。

感謝

戴維

+0

你有專輯數據庫中的數據?當連接到與您的測試相同的數據庫時,控制器所屬的網站是否顯示數據?測試和網站使用相同的數據庫連接字符串? – k3b 2013-07-06 08:06:27

回答

0

如果您有興趣瞭解與遺留代碼的工作有沒有更好的來源比「使用遺產」代碼簿

+0

是的,我有Micheal Feathers的書在列表中閱讀 - 謝謝。 – davy 2011-12-27 12:13:47

0

您可以用ViewDataDictionary類的Model屬性訪問模式:

albums = (List<Album>)result.ViewData.Model; 
+0

謝謝你的回覆Jan - 但是,專輯的數量始終是0,並且從來沒有5 :( – davy 2011-12-27 12:12:22

+0

並且當你調試GetTopSellingAlbums時返回5張專輯? – 2011-12-27 16:57:18