Создание автоматически сгенерированных целых чисел не работает

В соответствии с таблицей автокреплений, я должен быть в состоянии автоматически генерировать числа (1, 2, 3 и т. Д.).

Я использую последнюю версию (3.34.0) и использую тот же код, что и в шпаргалке, и постоянно получаю случайные числа, а не 1, 2, 3 и так далее. Я что-то пропустил? Шпаргалка устарела?

Мой код:

var fixture = new Fixture();
int i = fixture.Create<int>();

Редактировать:

Спасибо Томас - я добавил проблему на github:

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

1 ответ

Решение

В AutoFixture 3 числа создаются с использованием случайного алгоритма. Тем не менее, поведение 2.x можно повторно применить, настроив Fixture экземпляр с NumericSequenceCustomization:

var fixture = new Fixture();
fixture.Customize(
    new NumericSequenceCustomization());

var i1 = fixture.Create<int>();
var i2 = fixture.Create<int>();
var i3 = fixture.Create<int>();
// Prints -> 1
// Prints -> 2
// Prints -> 3

var l1 = fixture.Create<long>();
var l2 = fixture.Create<long>();
var l3 = fixture.Create<long>();
// Prints -> 4
// Prints -> 5
// Prints -> 6

var f1 = fixture.Create<float>();
var f2 = fixture.Create<float>();
var f3 = fixture.Create<float>();
// Prints -> 7
// Prints -> 8
// Prints -> 9

куда NumericSequenceCustomization определяется как:

internal class NumericSequenceCustomization : ICustomization
{
    public void Customize(IFixture fixture)
    {
        fixture.Customizations.Add(new NumericSequenceGenerator());
    }
}

Чтобы создать числа, уникальные для каждого типа, используйте NumericSequencePerTypeCustomization вместо:

var fixture = new Fixture();
fixture.Customize(
    new NumericSequencePerTypeCustomization());

var i1 = fixture.Create<int>();
var i2 = fixture.Create<int>();
var i3 = fixture.Create<int>();
// Prints -> 1
// Prints -> 2
// Prints -> 3

var l1 = fixture.Create<long>();
var l2 = fixture.Create<long>();
var l3 = fixture.Create<long>();
// Prints -> 1
// Prints -> 2
// Prints -> 3

var f1 = fixture.Create<float>();
var f2 = fixture.Create<float>();
var f3 = fixture.Create<float>();
// Prints -> 1
// Prints -> 2
// Prints -> 3
Другие вопросы по тегам