我有一个测试用例,其中需要4个不同的日期来构建对象。我发现的所有内容似乎都表明AutoFixture始终会生成唯一的元素,但问题是,它会在生成日期时考虑所有问题。结果是,当我对结果进行.ToShortDateString()
时,我可能会得到重复的结果。
我知道我可以循环,直到我只得到不同的值,但感觉不正确。
目前,我所拥有的是:
string[] dates;
do
{
dates = _fixture.CreateMany<DateTime>(4).Select(d => d.ToShortDateString()).ToArray();
} while (dates.Distinct().Count() != 4);
您可以生成唯一的整数(比如说天),然后将其添加到某个最小日期:
var minDate = _fixture.Create<DateTime>().Date;
var dates = _fixture.CreateMany<int>(4).Select(i => minDate.AddDays(i)).ToArray();
但是我不确定AutoFixture是否保证所有生成的值都是唯一的(例如,请参见this issue)
如@MarkSeeman在this post中提到的数字
当前,AutoFixture努力创建唯一的数字,但不能保证唯一的数字。例如,您可以用尽该范围,该范围最有可能发生在字节值[...]
如果数字对于唯一的测试用例很重要,我建议在测试用例本身中明确数字。您可以为此将Generator与Distinct结合使用
因此,在这种情况下,我现在使用
string[] dates = new Generator<DateTime>(_fixture)
.Select(x => x.ToShortDateString())
.Distinct()
.Take(4).ToArray();