0
我想寫以下控制器動作單元測試:如何測試從Controller Action返回的PartialViewResult的對象模型?
public ActionResult ProductList(int category)
{
IEnumerable<Product> productList = repository.Products.Where(p => p.CategoryId == category);
return PartialView("ProductList", productList);
}
,這是我的看法:
@model IEnumerable<POS.Domain.Entities.Product>
@foreach (var p in Model)
{
Html.RenderPartial("_ProductSummary", p);
}
我要測試的是,給出的int值category
,該ProductList
在productList
中返回一個PartialView
,其值爲合適的值。我不知道如何測試IEnumerable<Product> productList
的價值。
這是到目前爲止我的單元測試:
[TestMethod]
public void ProductListReturnsAppropriateProducts()
{
// 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", CategoryId = 1},
new Product {ProductId = 2, Name = "P2", CategoryId = 2},
new Product {ProductId = 3, Name = "P3", CategoryId = 1},
new Product {ProductId = 4, Name = "P4", CategoryId = 2},
new Product {ProductId = 5, Name = "P5", CategoryId = 3}
}.AsQueryable());
// Arrange - create a controller
ProductController controller = new ProductController(mock.Object);
// Action
IEnumerable<Product> result1 = (IEnumerable<Product>)controller.ProductList(1);
//IEnumerable<Product> result2 = (IEnumerable<Product>)controller.ProductList(2); ???
// Assert
Assert.AreEqual(result1, 2);
// Assert.AreEqual(result2, 2); ???
}
我得到一個System.InvalidCastException
因爲我想投下PartialViewResult
到IEnumerable
- 這就是我卡住了。 如何將我的控制器中的IEnumerable productList
作爲測試目標?
此外,不測試部分視圖是否正確生成是不好的做法? (我假設,如果productList
值是正確的,部分觀點將被適當地渲染)