2016-02-03 17 views
7

Số nguyên có được tạo bằng IFixture.Create<int>() duy nhất không?Có phải số nguyên được tạo với AutoFixture 3 độc đáo không?

The Wiki says rằng con số này là ngẫu nhiên, nhưng nó cũng cho chúng ta biết này

Các số đầu tiên được tạo ra trong phạm vi của [1, 255], vì điều này là một tập hợp các giá trị mà có giá trị cho tất cả kiểu dữ liệu số. loại dữ liệu số nhỏ nhất trong .NET là System.Byte, phù hợp với phạm vi này.

Khi 255 số nguyên đầu tiên đã được sử dụng, các số sau đó được chọn được chọn từ phạm vi [256, 32767], tương ứng với số còn lại số dương có sẵn cho System.Int16.

Hai điều có liên quan tại GitHub:

https://github.com/AutoFixture/AutoFixture/issues/2

https://github.com/AutoFixture/AutoFixture/pull/7

Và những gì về những kiểm tra đơn vị?

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 
} 

tôi đã không tìm thấy một tuyên bố nói rằng những con số được tạo ra là duy nhất, chỉ những bit thông tin rằng sẽ đề nghị đó, nhưng tôi có thể sai.

Trả lời

8

Hiện tại, AutoFixture cố gắng tạo số duy nhất, nhưng nó không đảm bảo số. Ví dụ: bạn có thể loại bỏ phạm vi, rất có thể xảy ra cho các giá trị byte. Ví dụ: nếu bạn yêu cầu 300 byte giá trị, bạn sẽ nhận các bản sao, vì chỉ có 256 giá trị để chọn.

Tự động trộn sẽ tái sử dụng các giá trị một cách hạnh phúc khi tập hợp ban đầu đã cạn; sự thay thế sẽ là ném một ngoại lệ.

Nếu điều quan trọng đối với trường hợp thử nghiệm là số duy nhất, tôi khuyên bạn nên làm rõ ràng trường hợp này là. Bạn có thể kết hợp với Generator<T>Distinct cho việc này:

var uniqueIntegers = new Generator<int>(new Fixture()).Distinct().Take(10); 

Nếu bạn đang sử dụng AutoFixture.Xunit2, bạn có thể yêu cầu một Generator<T> qua một cuộc tranh luận phương pháp thử nghiệm:

[Theory, AutoData] 
public void MyTest(Generator<int> g, string foo) 
{ 
    var uniqueIntegers = g.Distinct().Take(10); 
    // more test code goes here... 
} 
7

Các số đầu tiên được tạo trong phạm vi [1, 255] và có no duplicates present. Trên phạm vi đó, nó hiện có thể nhận được bản sao.

This vấn đề chứa thông tin hữu ích về cách có thể cải thiện thuật toán tích hợp.

Các vấn đề liên quan