2011-12-27 2 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

У вас есть данные альбома в базе данных? содержит ли веб-сайт, на котором находится контроллер, для отображения данных при подключении к тому же дБ, что и ваш тест? сделать тест и веб-сайт использовать ту же строку соединения db? – k3b

ответ

0

Если вы заинтересованы в получении информации о работе с унаследованным кодом, нет лучшего источник, чем «Работа с наследием» Кодовая книга

+0

Да, у меня есть книга Micheal Feathers в списке для чтения - спасибо. – davy

0

Вы можете получить доступ к модели с Model свойством ViewDataDictionary класса:

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

Спасибо за ответ Jan - Тем не менее, количество альбомов всегда 0 и никогда 5 :( – davy

+0

И когда вы отлаживаете GetTopSellingAlbums возвращает 5 альбомов? –

Смежные вопросы