[英]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.