【问题标题】:Mocking Files in MoqMoq 中的模拟文件
【发布时间】:2016-08-27 15:17:42
【问题描述】:

我有一个这样的模型:

 public class Products
{


    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Product_D { get; set; }

    [Required(ErrorMessage="Product is required")]
    [Display(Name="Product Name")]
    public string Product_Name { get; set; }

    [Required(ErrorMessage="Photo of the product is required")]
    [Display(Name="Product Photo")]
    public byte[] Product_Photo { get; set; }

    [NotMapped]
    public HttpPostedFileBase Image { get; set; }

    [Required(ErrorMessage="Enter the Quantity Available")]
    [Display(Name = "Product Quantity")]
    public int Product_Quantity { get; set; }

    [Required(ErrorMessage="Enter the price of the product")]
    [Display(Name = "Product Price")]
    public int Product_Price { get; set; }

    [Required(ErrorMessage = "Choose your category")]
    public string Category { get; set; }


    [NotMapped]
    public List<System.Web.Mvc.SelectListItem> CategoryList { get; set; }

    [Required(ErrorMessage = "Choose your category")]
    public string Gender { get; set; }



    [NotMapped]
    public List<System.Web.Mvc.SelectListItem> GenderList { get; set; }

}

我正在尝试模拟数据库,我正在向我的模拟数据库添加产品,我能够为所有其他数据类型提供值,但我不确定如何使用文件。

 public void MockRepo()
    {
        IList<Products> products = new List<Products>
        {
            new Products { Product_D = 1, Product_Name = "C# Unleashed",Product_Quantity =  20, Product_Price = 20 },
                new Products { Product_D = 2, Product_Name = "ASP.Net Unleashed",Product_Quantity = 20, Product_Price = 30 },
                new Products { Product_D = 3, Product_Name = "Silverlight Unleashed",Product_Quantity = 20, Product_Price = 100 }
        };
        //Mock Products using MOQ
        Mock<IProduct> mockproductrepo = new Mock<IProduct>();
        //return all products
        mockproductrepo.Setup(r => r.FindAll()).Returns(products);
        // returns products by name
        mockproductrepo.Setup(r => r.FindByName(It.IsAny<string>())).Returns(products.Single());
        //returns products by id
        mockproductrepo.Setup(r => r.FindById(It.IsAny<int>())).Returns(products.Single());
    }

我认为提供图像文件的路径对我没有帮助。使用文件系统会使我的测试变慢。即使我这样做,我也应该将图像转换为 Bytes 。我该如何处理?提前致谢

【问题讨论】:

    标签: asp.net-mvc file unit-testing


    【解决方案1】:

    这是一篇介绍如何使用 Moq 上传文件的文章

    http://blog.csainty.com/2009/01/aspnet-mvc-unit-test-file-upload-with.html

    还有这个堆栈溢出问题。 Unit Test a file upload, how?

    我认为您在测试时遇到了问题,因为正在混合您的视图模型和实体/数据库模型。您的实体信息与您的实体模型相关,而上传的图像和选择列表的其他信息与您的控制器上下文相关。

    我会将它们分开,因为看起来您在属性上有 [NotMapped] 的唯一原因是从 Db 中辨别出 UI 问题。

    【讨论】:

      猜你喜欢
      • 2018-10-22
      • 2018-01-13
      • 1970-01-01
      • 1970-01-01
      • 2012-08-21
      • 2011-06-13
      • 2016-03-20
      • 2019-09-11
      • 2010-11-16
      相关资源
      最近更新 更多