我最近尝试了针对c#的AutoPoco,这是一种自动创建POCO并将其填充测试数据的工具。但是,我现在陷入困境。我有一个人POCO,每个人都有一个电子邮件地址列表,如下所示:

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填充字符串列表的提示?

最佳答案

这是一个工作示例。您发布的代码段无法编译,因此这是第一个问题。

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

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);
    }
}

07-25 20:24