Настроить генерацию свойства AutoFixture, используя ограниченные случайные значения - PullRequest
0 голосов
/ 07 декабря 2018

Контекст

Я хотел бы создать коллекцию моего класса, но некоторые его строковые свойства имеют ограниченные значения.Я хотел бы, чтобы эти значения были все еще случайными в ограниченном наборе.

Я выяснил способ настройки, но моя реализация случайной генерации, кажется, не использует какую-либо функцию автоматического исправления, и я не хочу изобретать зановоthe wheel:

var random = new Random();
var fixture = new Fixture();
fixture.Customize<MyClass>(b => b
    .With(i => i.MyProperty, random.Next(2) == 0 ? "O" : "C"));

var result = fixture.CreateMany<MyClass>(1000);

Вопрос

Есть ли более эффективный способ сообщить AutoFixture, что мне нужна произвольная строка "O" или "C"?

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

Между тем я понял, что приведенный выше код не работает вообще, поэтому он не может считаться «резервным» планом.(Выражение: random.Next (2) == 0? "O": "C" вычисляется только один раз)

1 Ответ

0 голосов
/ 17 декабря 2018

Начиная с AutoFixture 4.6.0 , вы можете использовать обратные вызовы внутри функции настройки With.Это позволяет ограничить значение поля, но позволить ему все еще варьироваться среди созданных образцов.

Пример исходного кода:

[Fact]
public void CustomizeMany()
{
    var fixture = new Fixture();
    var items = fixture.Build<MyClass>()
        .With(x => x.EvenNumber, (int number) => number * 2)
        .CreateMany(1000)
        .ToArray();

    Assert.All(items, item => Assert.Equal(0, item.EvenNumber % 2));
}

public class MyClass
{
    public int EvenNumber { get; set; }
}

Вы можете настроить образец в соответствии с вашими конкретными потребностями.

...