2

단위 테스트가 처음이므로 매우 기본적인 질문이라고 확신하지만 검색 할 때 해결책을 찾지 못했습니다.해당 카테고리별로 제품을 필터링하는 Moq 단위 테스트

제품을 해당 범주로 필터링 할 수 있는지 테스트하려고합니다. 내 Product 클래스의 모든 속성에 액세스 할 수 있지만 내 Category 클래스의 속성에는 액세스 할 수 없습니다. 예를 들어, Category1.Name을 찾지 못합니다. 아무도 내가 뭘 잘못하고 있다고 말할 수 있습니까?

이것은 제 제품 클래스입니다.

public partial class Product 
    { 
     public int ProductID { get; set; } 
     public string Name { get; set; } 
     public string Description { get; set; } 
     public decimal Price { get; set; } 
     public int CategoryID { get; set; } 

     public virtual Category Category1 { get; set; } 
    } 

이것은 내 테스트입니다. 당신의 모형 설정에서

[TestMethod] 
     public void Can_Filter_Products() 
     { 
      //Arrange 

      Mock<IProductRepository> mock = new Mock<IProductRepository>(); 
      mock.Setup(m => m.Products).Returns(new Product[] 
      { 
       new Product {ProductID=1,Name="P1", **Category1.Name** = "test1" }, 
       new Product {ProductID=2,Name="P2", **Category1.Name** = "test2"}, 
       new Product {ProductID=3,Name="P3", **Category1.Name** = "test1"}, 
       new Product {ProductID=4,Name="P4", **Category1.Name** = "test2"}, 
       new Product {ProductID=5,Name="P5", **Category1.Name** = "test3"}, 
      }.AsQueryable()); 

      //Arrange create a controller and make the page size 3 items 
      ProductController controller = new ProductController(mock.Object); 
      controller.PageSize = 3; 

      //Action 
      Product[] result = ((ProductsListViewModel)controller.List("test2", 1).Model).Products.ToArray(); 

      //Assert - check that the results are the right objects and in the right order. 
      Assert.AreEqual(result.Length, 2); 
      Assert.IsTrue(result[0].Name == "P2" && result[0].Category1.Name == "test2"); 
      Assert.IsTrue(result[1].Name == "P4" && result[1].Category1.Name == "test2"); 
     } 
+0

**'어떻게해야'** Category1.Name은 무엇입니까? –

+0

내 범주 클래스의 이름 속성 일뿐입니다. 내비게이션 막대가 있으며 카테고리가 선택되면 해당 값이 컨트롤러에 전달되고 일치하는 카테고리 이름을 기반으로 제품이 필터링됩니다. – MountainBiker

답변

1

, 대신이 시도 :

 mock.Setup(m => m.Products).Returns(new[] 
     { 
      new Product {ProductID=1,Name="P1", Category1 = new Category { Name = "test1"} }, 
      new Product {ProductID=2,Name="P2", Category1 = new Category { Name = "test1"} } 
     }.AsQueryable()); 
+1

그게 효과가있다. 고맙습니다. – MountainBiker

+0

다행히 도울 수 있어요 :) –