【问题标题】:Are there any tools to populate class properties with random data? [closed]是否有任何工具可以用随机数据填充类属性? [关闭]
【发布时间】:2009-09-11 21:20:39
【问题描述】:

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

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 上并在此处链接...我显然不会完成,但如果其他人想要,这将是一个开始继续努力。

【问题讨论】:

    标签: c# class random


    【解决方案1】:

    你可以在 c# 中使用 Object Hydrator

    网址http://objecthydrator.codeplex.com/

    并使用类似

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

    阿南德更多

    【讨论】:

    • 查看接受的答案。在没有找到任何东西后,我写了 ObjectHydrator。 :)
    【解决方案2】:

    我尝试了 AutoFixture (http://autofixture.codeplex.com/),它对我来说效果很好。 我能够在一行代码中生成具有深层子级的对象。

    【讨论】:

      【解决方案3】:

      好吧...所以我从来没有找到一个...所以我决定自己开始。查看: Object Hydrator.

      该项目目前正在快速发展...但我认为它具有潜力...如果您有如何改进它的想法,请告诉我。

      【讨论】:

      • 接受我自己的答案感觉不对……但到目前为止,Object Hydrator 似乎是一个不错的解决方案。
      • 那里的项目非常有趣。您是否处理内部集合/列表/数组/字典的创建,以及仅具有 get 访问器的属性?
      • 我们可以处理内部列表,而不是数组或字典。实际上没有尝试过吸气剂。
      • 我明白了。我问这个是因为我们有一些自定义代码来实例化和填充一些 dto 类,以便为我们的 webapi 文档生成自动示例。我真的很想避免让我们维护这部分代码,因为这是一项非常通用的任务,我觉得我们有时是在重新发明轮子。但是我们需要处理从非默认构造函数实例化对象并填充内部数据集合,即使它们被公开为仅获取属性。我稍后会看看你的项目,也许我们可以解决问题,我们公司会使用它;)
      • 项目是否处理原语?
      【解决方案4】:

      现在你也有 NBuilder (nbuilder.org) 做同样的事情。

      我不知道这两个项目是否链接。

      【讨论】:

        【解决方案5】:

        我不知道您的目标,但我会尽量保持接近代码级别。这种方法可能不适合你,但它过去对我有用。

        您可以生成随机数据并将其放入数据库中。有一些商业成本产品可以做到这一点。我使用的是 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(...);
          }
        }
        

        同样,我不知道您的需求以及您在运行时是否需要随机数据。上述方法仅在您想快速静态地生成大量数据时才有用。

        【讨论】:

        • 好吧,很抱歉,我不知道有一个可定制的运行时类数据随机化器,我觉得这正是您所要求的。
        【解决方案6】:

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

        我有超级复杂的嵌套对象,其中包含带有嵌套数组的数组,这对我来说已经成功了一半。 http://hydrator.codeplex.com/

        我填充除了数组之外的所有内容。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2022-01-01
          • 2012-11-10
          • 1970-01-01
          • 2010-12-09
          • 1970-01-01
          • 2010-11-14
          • 1970-01-01
          • 2015-04-11
          相关资源
          最近更新 更多