簡體   English   中英

ASP.net MVC 4單元測試Viewbag / ViewModel測試

[英]ASP.net MVC 4 Unit Testing Viewbag/ViewModel test

我是.net中的單元測試/ mvc的新手。 我一直在關注Pro ASP.net MVC 4第4版。 在書中他們創造了一個假商店。 在其中一個示例中,他們使用viewbag將數據傳遞到局部視圖。 他們有一個關聯單元測試工作,但是我重寫了示例,通過視圖模型而不是viewbag容器傳遞數據,現在我似乎無法想出一種方法來重寫單元測試以通過。 有人介意幫助我嗎? 我只是試圖弄清楚這一小時,這是一個失敗的努力。 以下是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();
    } 
}

如何更改測試以使其工作? 非常感謝fellas!

假設返回類型的操作是ViewResult,您可以使用以下代碼:

// 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 = (ViewResult)target.Menu(categoryToSelect);

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

我希望這適合你。 問候,

好吧,我終於明白了。 我是個傻瓜。 我制作的視圖模型類稱為CategoryInfoViewModel。 所以我不得不這樣做......

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM