使用自动固定装置构建组合数据



我是AutoFixture的新手,特别寻找一种创建组合数据的方法。

public class Person
{
public string Firstname { get; set; }
public string Lastname { get; set; }
}
var firstnames = new[] { "John", "Jane", ... };
var lastnames = new[] { "Doe", "Smith", ... };
var persons = Fixture.CreateMany<Person>().ToList();

现在我想创建一个包含名字和姓氏所有组合Person类的列表。有没有办法用自动固定装置做到这一点?我找不到这种情况的任何示例。

AutoFixture没有任何允许创建组合数据的功能。但是,理论上您可以集成一个生成器类,该生成器类创建全名和类Person的扩展实例。

其他工具可能会更有效地生成组合数据,但出于演示目的,假设您可以使用以下 LINQ 查询生成所有全名组合。

from firstName in firstNames
from lastName in lastNames
select new FullName(firstName, lastName);

您可以将此序列封装到一个ISpecimenBuilder中,以保留上次生成的名称对的状态。例如,使用IEnumerator.

这将允许您在生成Person实例时使用此构建器来注入FirstNameLastName的值。

您可以查看此要点以获取更多详细信息。

最后,您应该进行如下所示的测试。

[Fact]
public void GeneratesCombinatorialNames()
{
var firstNames = new[] {"Jake", "Lana"};
var lastNames = new[] {"Gates", "Morris"};
var fixture = new Fixture().Customize(new PersonCustomization(firstNames, lastNames));
var expected1 = new[]
{
new Person("Jake", "Gates"),
new Person("Jake", "Morris"),
new Person("Lana", "Gates")
};
var expected2 = new[]
{
new Person("Lana", "Morris"),
new Person("Jake", "Gates"),
new Person("Jake", "Morris")
};
var people1 = fixture.CreateMany<Person>();
var people2 = fixture.CreateMany<Person>();
Assert.Equal(expected1, people1.ToArray());
Assert.Equal(expected2, people2.ToArray());
}

最新更新