c# - 使用 AutoFixture 构建组合数据
问题描述
我是 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 做到这一点?我找不到这种情况的任何例子。
解决方案
AutoFixture 没有任何允许创建组合数据的功能。但是,理论上您可以集成一个生成器类,该生成器类创建全名并通过扩展类实例Person
。
其他工具很可能可以更有效地生成组合数据,但出于演示目的,我们假设您可以使用以下 LINQ 查询生成所有全名组合。
from firstName in firstNames
from lastName in lastNames
select new FullName(firstName, lastName);
您可以将此序列封装到ISpecimenBuilder
将保留最后生成的名称对的状态的 a 中。例如使用IEnumerator
.
这将允许您在生成Person
实例以注入 和 的值时使用此构建FirstName
器LastName
。
您可以查看此Gist以了解更多详细信息。
最后你应该有看起来像这样的测试。
[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());
}
推荐阅读
- ruby-on-rails - Qovery 上的 Rails 应用程序无法连接到服务器
- c# - 如果其他有效方式如何避免更多?
- java - Spring Boot中的异常处理方法
- sass - 我将如何使用孩子选择祖父母班
- python - 为什么我的 while 循环不起作用?文字冒险游戏
- postgresql - 在 JSON 聚合中执行分组
- debugging - 在 MS-Debug 中输出 Az-Za
- python-3.x - 多重继承,*args的作用是什么
- python - 如何将样式表应用于 PyQt5 中的类的属性
- azure - 使用 Kusto 查询语言 (KQL) 绘图时如何定义辅助 y 轴