2016-02-03 7 views
7

整数はIFixture.Create<int>()で生成されますか?AutoFixture 3で生成される整数は一意ですか?

The Wiki says番号はランダムであるが、これ はすべてのための有効な値のセットがあるとして、それはまた、私たちの最初の数字は、[1、255]の範囲内で生成され、この

を伝えること数値データ型。 .NETの 数値データ型の最小値はSystem.Byteで、これは の範囲に収まります。最初の255個の整数が使用された場合

、数字が続い はのSystem.Int16のために利用可能な残り 正の数に対応する範囲[256、32767]、から取り出されます。

のGitHubでの2つの関連する事柄:

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 
} 

私は、それを示唆している情報のビットのみを生成した番号は一意であると言う文を発見していないが、私は間違っている可能性があります。

答えて

8

現在、AutoFixtureはユニークな番号を作成しようとしていますが、を保証するものではありません。たとえば、byte値で発生する可能性が最も高い範囲を使い果たすことができます。たとえば、300 byteの値を要求した場合は、になります。選択できる値は256にすぎないためです。

AutoFixtureは、最初のセットが使い尽くされると値をうまく再利用します。代わりに例外をスローすることになります。

数値が一意であるテストケースにとって重要な場合は、を明示的に指定して、をテストケースそのものにすることをお勧めします。あなたはこのためDistinctGenerator<T>を組み合わせることができます

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... 
} 
7

最初の数字は[1、255]の範囲で生成され、no duplicates presentです。その範囲を超えると、それはは現在であることがあります。

Thisには、組み込みアルゴリズムの改善方法に関する有用な情報が記載されています。

関連する問題