3

.net での単体テスト/mvc は初めてです。私は本Pro ASP.net MVC 4、第4版に従っています。本の中で、彼らは偽の店を作ります。例の 1 つでは、viewbag を使用してデータを部分ビューに渡します。それらには関連する単体テストがありますが、ビューバッグコンテナーではなくビューモデルを介してデータを渡すように例を書き直しましたが、単体テストを書き直して渡す方法がわかりません。誰か手伝ってくれませんか?私はこれを1時間理解しようとしているだけで、それは無駄な努力です。以下はWORKINGテストです。

// Arrange
// - create the mock repository
Mock<IProductRepository> mock = new Mock<IProductRepository>();
mock.Setup(m => m.Products).Returns(new Product[] {
    new Product {ProductID = 1, Name = "P1", Category = "Apples"},
    new Product {ProductID = 4, Name = "P2", Category = "Oranges"},
}.AsQueryable());

// Arrange - create the controller
NavController target = new NavController(mock.Object);

// Arrange - define the category to selected
string categoryToSelect = "Apples";

// Action
string result = target.Menu(categoryToSelect).ViewBag.SelectedCategory;

// Assert
Assert.AreEqual(categoryToSelect,result);

ビューモデルを介して(正常に)データを渡したので...

public class CategoryInfoViewModel:IEnumerable<string>
{
    public IEnumerable<string> Categories { get; set; }
    public string SelectedCategory { get; set; }

    public IEnumerator<string> GetEnumerator()
    {
        return Categories.GetEnumerator();
    } 

    IEnumerator IEnumerable.GetEnumerator()
    {
        return GetEnumerator();
    } 
}

テストを変更して機能させるにはどうすればよいですか? どうもありがとう!

4

2 に答える 2

0

わかりました、私はついにそれを理解しました。私は骨頭です。私が作成したビュー モデル クラスは、CategoryInfoViewModel と呼ばれます。だから私はこれをしなければならなかった...

 // Action
 CategoryInfoViewModel result = (CategoryInfoViewModel)target.Menu(categoryToSelect).Model;

 // Assert
 Assert.AreEqual(categoryToSelect, result.SelectedCategory);
于 2013-11-05T19:49:51.647 に答える