Как заставить 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, так что это может быть спорным.

Другие вопросы по тегам