用IFixture.Create<int>()
生成的整数是否唯一?
The Wiki says数字是随机的,但这也告诉我们
GitHub上的两件相关的事情:
https://github.com/AutoFixture/AutoFixture/issues/2
https://github.com/AutoFixture/AutoFixture/pull/7
那这些单元测试呢?
https://github.com/AutoFixture/AutoFixture/blob/master/Src/AutoFixtureUnitTest/GeneratorTest.cs#L33
[Theory, ClassData(typeof(CountTestCases))]
public void StronglyTypedEnumerationYieldsUniqueValues(int count)
{
// Fixture setup
var sut = new Generator<T>(new Fixture());
// Exercise system
var actual = sut.Take(count);
// Verify outcome
Assert.Equal(count, actual.Distinct().Count());
// Teardown
}
https://github.com/AutoFixture/AutoFixture/blob/master/Src/AutoFixtureUnitTest/GeneratorTest.cs#L57
[Theory, ClassData(typeof(CountTestCases))]
public void WeaklyTypedEnumerationYieldsUniqueValues(int count)
{
// Fixture setup
IEnumerable sut = new Generator<T>(new Fixture());
// Exercise system
var actual = sut.OfType<T>().Take(count);
// Verify outcome
Assert.Equal(count, actual.Distinct().Count());
// Teardown
}
我还没有找到一个陈述说生成的数字是唯一的,只有那些暗示它的信息是唯一的,但是我可能是错的。
最佳答案
当前,AutoFixture努力创建唯一的数字,但是不能保证它是。例如,您可以用尽该范围,最有可能发生在byte
值上。例如,如果您请求300个byte
值,则将得到重复项,因为只有256个值可供选择。
初始设置用完后,AutoFixture会很高兴地重用值。另一种选择是抛出一个异常。
如果数字对于唯一的测试用例很重要,我建议在测试用例本身中使这个显式的成为可能。您可以为此将Generator<T>
和Distinct
结合使用:
var uniqueIntegers = new Generator<int>(new Fixture()).Distinct().Take(10);
如果您使用的是AutoFixture.Xunit2,则可以通过测试方法参数请求
Generator<T>
:[Theory, AutoData]
public void MyTest(Generator<int> g, string foo)
{
var uniqueIntegers = g.Distinct().Take(10);
// more test code goes here...
}
关于c# - AutoFixture 3生成的整数是否唯一?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35172186/