如何使用自动修复功能获得不同的日期(yyyy-mm-dd)

问题描述 投票:2回答:2

我有一个测试用例,其中需要4个不同的日期来构建对象。我发现的所有内容似乎都表明AutoFixture始终会生成唯一的元素,但问题是,它会在生成日期时考虑所有问题。结果是,当我对结果进行.ToShortDateString()时,我可能会得到重复的结果。

我知道我可以循环,直到我只得到不同的值,但感觉不正确。

目前,我所拥有的是:

string[] dates;
do
{
  dates = _fixture.CreateMany<DateTime>(4).Select(d => d.ToShortDateString()).ToArray();
} while (dates.Distinct().Count() != 4);
c# autofixture
2个回答
1
投票

您可以生成唯一的整数(比如说天),然后将其添加到某个最小日期:

var minDate = _fixture.Create<DateTime>().Date;
var dates = _fixture.CreateMany<int>(4).Select(i => minDate.AddDays(i)).ToArray();

但是我不确定AutoFixture是否保证所有生成的值都是唯一的(例如,请参见this issue


1
投票

如@MarkSeeman在this post中提到的数字

当前,AutoFixture努力创建唯一的数字,但不能保证唯一的数字。例如,您可以用尽该范围,该范围最有可能发生在字节值[...]

如果数字对于唯一的测试用例很重要,我建议在测试用例本身中明确数字。您可以为此将Generator与Distinct结合使用

因此,在这种情况下,我现在使用

string[] dates = new Generator<DateTime>(_fixture)
                     .Select(x => x.ToShortDateString())
                     .Distinct()
                     .Take(4).ToArray();
© www.soinside.com 2019 - 2024. All rights reserved.