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

ですが、私は何かをしないのです - それは可能です?

第2に、レガシーコードに関する多くの原則を学ぶためにこれをやっています。私はこのコードを持っていますが、私はそれが真剣に改善されることがわかります。また、テストもありません。

私の計画は、既存のコードをテストでカバーし、真剣にそれを修正することです。

ここでは「悪い練習」などの反応はありません。また、このレイヤーやそのパターンなどを後で実装するように実装してください。

ただ、上記のコードをテストする最も簡単な方法は、本当におそらく良いブログや書籍も参考になる

:)を助けてくださいます。

おかげ

デイビー

+0

データベースにアルバムデータがありますか?あなたのテストと同じdbに接続されている場合、コントローラーが所属するWebサイトにデータが表示されますか?テストとウェブサイトで同じdb-connection文字列を使用しますか? – k3b

答えて

0

「従来の作業」よりもソースコード

+0

ええ、私はMicheal Feathersの本を読んで読んでいます。 – davy

0

あなたはViewDataDictionaryクラスのModelプロパティでモデルにアクセスすることはできません:あなたはレガシーコードの操作について学ぶことに興味を持っている場合は良いがあり

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

返信ありがとうございましたJan - しかし、アルバムの数は常に0と決して5です:( – davy

+0

GetTopSellingAlbumsをデバッグすると5枚のアルバムが返されますか? –

関連する問題