是否有任何工具用随机数据填充类属性?

时间:2009-09-11 21:20:39

标签: c# class random

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

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 个答案:

答案 0 :(得分:8)

好的......所以我从未找到过......所以我决定开始自己的。查看: Object Hydrator

该项目目前是一个快速的峰值...但我认为它有潜力...让我知道你是否有想法如何使它更好。

答案 1 :(得分:5)

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

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

我不知道你的目标,但我会将其保持在接近代码级别的位置。这种方法可能不适合你,但它在过去对我而言。

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

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

答案 4 :(得分:0)

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

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

我填充了除阵列之外的所有内容。

答案 5 :(得分:-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);
}

Anand More