代码之家  ›  专栏  ›  技术社区  ›  Webjedi

有什么工具可以用随机数据填充类属性吗?[关闭]

  •  8
  • Webjedi  · 技术社区  · 17 年前

    我要做的是创建一个具有不同属性的类,将该类传递给另一个将使用适当的随机数据设置属性的类…这里是伪代码:

    public class Customer
    {
       [Attribute("FirstName")]
       private string CustomerFirstName;
       public {get;set} //etc
    
       [Attribute("LastName")]
       private string CustomerLastName;
       public {get;set;} //etc
    
       [Attribute("DateTime")]
       private DateTime CustomerSignUpDate;
       public DateTime {get;set;} //yadda
    
       [Attribute("Phone")]
       private string CustomerPhone;
       public string {get;set;} //yadda
    }
    

    然后这样做

    IList<Customer> CustomerList=ClassFillerOutClass(new Customer(),5);
    

    结果将是5个客户的列表,他们的财产中有适当的“随机”数据。

    如果这不存在……我想我可以自己开始一个项目……如果不需要的话,我只是不想重新发明轮子。

    编辑:我忘了一件。我想把它用作测试工具。因此,在上面的示例中,我可以快速创建一个包含5个具有随机但适当值的客户的列表。然后说把它传递给我的持久性方法,并有一些我可以检查的东西。我试图避免每次为我的TDD目的手动创建填充对象。

    编辑2:好的,所以我开始滚动我自己的…这个周末我会把它贴在codeplex上,并链接到这里…我显然不会做,但如果有人想做,这将是一个开始。

    6 回复  |  直到 9 年前
        1
  •  8
  •   Webjedi    17 年前

    好吧……所以我没找到……所以我决定自己动手。退房: Object Hydrator .

    该项目目前是一个快速的高峰…但我认为它有潜力…如果你有想法如何使它更好,请告诉我。

        2
  •  4
  •   Maxim Eliseev    12 年前

    我试过自动安装( http://autofixture.codeplex.com/ )对我来说效果很好。 我能够在一行代码中生成一个具有子层次结构的对象。

        3
  •  1
  •   Machado    14 年前

    现在你还有一个建筑商( nbuilder.org )也一样。

    我不知道这两个项目是否都有关联。

        4
  •  0
  •   David Andres    17 年前

    我不知道您在这里的目标,但我会将其保持在接近代码级别的水平。这种方法可能对你不起作用,但对我来说过去是这样的。

    您可以生成随机数据并将其放入数据库中。有一些商业成本产品可以做到这一点。我使用的是Redgate的SQL数据生成器。

    有了这些数据,您可以在SQL中执行一些文本操作来转换列数据:

    Table Customer
    FirstName | LastName | SignUpDate | Phone
    Bob         Smith      1/2/2009     555-555-1212
    Jane        Doe        9/11/2009    555-300-1334
    ...
    

    进入:

    new Customer () 
    {
      CustomerFirstName = "Bob", 
      CustomerLastName = "Smith", 
      CustomerSignUpDate = DateTime.Parse("1/2/2009"), 
      Phone = "555-555-1212"
    },
    new Customer () 
    {
      CustomerFirstName = "Jane", 
      CustomerLastName = "Doe", 
      CustomerSignUpDate = DateTime.Parse("9/11/2009"), 
      Phone = "555-300-1334
    },
    

    并使用文本编辑器(这是C 3.0语法)将其包装为以下内容:

    public class FakeCustomerRepository
    {
      private IList<Customer> m_Customers = new List<Customer>()
                   {
                      [insert SQL text transform here]
                   };
    
      public Customer Get(...)
      {
        return m_Customers.Find(...);
      }
    }
    

    同样,我不知道您的需要,也不知道您在运行时是否需要随机数据。上面描述的方法只有在您希望快速静态地生成大量数据时才有用。

        5
  •  0
  •   Omzig    9 年前

    所有建议的对象填充器都不适用于我的复杂对象。

    我有超复杂的嵌套对象和带有嵌套数组的数组,这对我来说是半途而废。 http://hydrator.codeplex.com/

    除了数组,我什么都填充。

        6
  •  -1
  •   Anand More    11 年前

    你可以在C中使用物体水合器。#

    统一资源定位地址 http://objecthydrator.codeplex.com/

    使用类似

    public Employee GetEmployee()
    {
         return new Hydrator<Employee>().GetSingle();
    }
    
    public IList< Employee> GetEmployees()
    {
     return new Hydrator<Employee>().GetList(100);
    }
    

    阿南德更多

    推荐文章