次のコントローラー アクションの単体テストを作成します。
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
返すことです。の値をテストする方法がわかりません。PartialView
productList
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); ???
}
aを anSystem.InvalidCastException
にキャストしようとしているため、 a を取得します-これが私が立ち往生している場所です。 テストのためにコントローラーでIEnumerable をターゲットにするにはどうすればよいですか?PartialViewResult
IEnumerable
productList
また、部分ビューが正しく生成されていることをテストしないのは悪い習慣でしょうか? (productList
値が正しければ、部分ビューが適切にレンダリングされると想定しています)