Как заставить FsCheck генерировать случайные строки, которые уважают MaxLengthAttribute?
Возможно ли для FsCheck генерировать случайные записи, которые относятся к атрибуту MaxLengthAttribute. Пример типа записи:
type Person =
{
Id: int
[<System.ComponentModel.DataAnnotations.MaxLength(256)>]
FirstName: string
[<System.ComponentModel.DataAnnotations.MaxLength(256)>]
LastName: string
}
1 ответ
Решение
Не из коробки, но вы можете сделать что-то вроде:
Arb.generate<Person>
|> Gen.where (fun p -> p.FirstName.Length <= 256 && p.LastName.Length <= 256)
Тогда это вопрос создания предиката для Gen.where
основанный на типе передаваемой вещи, т.е. используйте отражение, чтобы найти свойства, которые имеют атрибут MaxLength, получить значение и ограничить длину.
Также обратите внимание, что по умолчанию максимальная длина генерируемых строк для генерации 100 значений на тесты равна 50, так что это может быть спорным.