Автофиксатор по умолчанию генерирует уникальные значения для свойств. Поэтому вам не нужно указывать, какое свойство должно быть уникальным - вместо этого укажите неуникальное значение для другого свойства:
// with AutoFixture.SeedExtensions
fixture.Build<Foo>().With(f => f.Name, fixture.Create("Name")).CreateMany(20)
Обратите внимание: если вы хотите обеспечить неуникальные значения для других свойств (имеющих только Id уникальные), вы можете создать простые расширения для IPostprocessComposer
, которые предоставляют набор возможных значений для свойства:
public static IPostprocessComposer<T> With<T, TProperty>(
this IPostprocessComposer<T> composer,
Expression<Func<T, TProperty>> propertyPicker,
IEnumerable<TProperty> possibleValues) =>
composer.With(propertyPicker, possibleValues.ToArray());
public static IPostprocessComposer<T> With<T, TProperty>(
this IPostprocessComposer<T> composer,
Expression<Func<T, TProperty>> propertyPicker,
params TProperty[] possibleValues)
{
var rnd = new Random();
return composer.With(
propertyPicker,
() => possibleValues[rnd.Next(0, possibleValues.Length)]);
}
Использование простое - следующий код создает список foos с двумя разными значениями имени и тремя разными значениями для целочисленного свойства:
fixture.Build<Foo>()
.With(f => f.SomeIntegerProperty, 10, 20, 50)
.With(f => f.Name, fixture.CreateMany<string>(2))
.CreateMany(20);