如何在单元测试中比较视图模型和依赖项

本文关键字:模型 依赖 视图 比较 单元测试 | 更新日期: 2023-09-27 17:57:02

下面是我的方法的代码:-

   [HttpPost]
   public ActionResult Index(productViewModel model)
   {
       if (model != null)
       {             
           return PartialView("_ProductGrid", GetProduct(model));
       }
       else
       {
           return RedirectToAction("Index", "Product");
       }
   }

下面是单元测试方法的代码(在C#,MVC中):-

    [TestMethod]
    public void Index_WithModel_PostTest()
    {
        //Arrange
        ProductController controller = new ProductController();
        var model = new productViewModel()
        {
            Name="product1",
            Description="desc"
        };

        //Act
        PartialViewResult actual = controller.Index(model) as PartialViewResult;                       
        if (actual != null)
        {
            var viewmodel = (productViewModel)((ViewResultBase)(actual)).Model;
            int matches = _productService.GetDeals("", model.Description).Count +
                          _productService.GetInsurance("", model.Description).Count +
                          _productService.GetCategory("", model.Description).Count;

            //Assert
            Assert.IsNotNull(actual);
            Assert.IsInstanceOfType(actual, typeof(PartialViewResult));
            Assert.IsInstanceOfType(viewmodel, typeof(productViewModel));
            Assert.AreEqual("_ProductGrid", actual.ViewName);
            Assert.AreEqual(matches, viewmodel.Products.Count());
        }
    }

您可以在该方法的以下部分看到,我正在从所有 3 种方法中获取Products。但是所有这 3 种方法都是ProductService依赖关系。我想知道我应该mock这种情况吗?或者我可以用其他方式做?我想Assert匹配变量和actual.Product.Countcount

如何在单元测试中比较视图模型和依赖项

我认为单元测试的本质是利用关注点分离的优势。U 应该使用 moq 创建一个由创建的存储库访问的模拟数据,并在控制器中调用该存储库,然后将其传递给单元测试。关注点分离和单元测试的本质是能够分别测试每一层。浏览最小起订量