2013-02-14 86 views
2

我最近尝试过使用AutoPoco for c#,它是一种自动创建POCO并用测试数据填充它们的工具。但是,我现在卡住了。我有一个人POCO,而且每个人都有电子邮件地址的列表,像这样:使用AutoPoco填充列表属性

class Person 
{ 
    String Name; 
    int Age; 
    List<string> EmailAddresses; 
} 

现在,我尝试用AutoPoco来填充它:

   x.Include<Person>() 
        .Setup(p => p.Name).Use<FirstNameSource>(); 
        .Setup(p => p.EmailAddresses).Use<EmailAddressSource>() 
       ; 

但第二线失败,一个语法错误,因为它期望一个字符串属性,而不是一个列表。 AutoPoco有一个EnumerableSource,可能是我需要的,但是我找不到任何代码示例。你能给我一个关于如何用AutoPoco填充字符串列表的提示吗?

回答

1

这是一个工作示例。你发布的代码片段不能编译,所以这是第一个问题。

我找不到更优雅的方式来生成集合的元素。

public class Person 
{ 
    public String Name; 
    public int Age; 
    public List<string> EmailAddresses = new List<string>(); 

    public void Add(string email) 
    { 
     EmailAddresses.Add(email); 
    } 
} 

[Test] 
public void Noodling() 
{ 
     IGenerationSessionFactory factory = AutoPocoContainer.Configure(x => 
    { 
     x.Conventions(c => { 
      c.UseDefaultConventions(); 
     }); 
     x.AddFromAssemblyContainingType<LegacyUserProfileDto>(); 

     x.Include<Person>() 
      .Setup(p => p.Name).Use<FirstNameSource>() 
      .Invoke(z => z.Add(Use.Source<string, EmailAddressSource>())); 
     //.Invoke(z => z.EmailAddresses.Add(Use.Source<string, EmailAddressSource>()));//Fails 
    }); 
    IGenerationSession session = factory.CreateSession(); 

    Person person = session.Single<Person>().Get(); 
    Console.WriteLine(person.Age + " " + person.Name); 
    foreach (string emailAddress in person.EmailAddresses) 
    { 
     Console.WriteLine(emailAddress);  
    } 
}