Я пытаюсь инициализировать объекты моей модели с помощью FsCheck. Модели живут на C# и обычно инициализируются через Entity Framework через их частные сеттеры. Например (придумано):
public class Model
{
public string One { get; private set; }
public int Two { get; private set; }
}
Я хотел бы создать генератор FsCheck, который автоматически использует зарегистрированный генератор для каждого свойства для создания модели. Что-то вроде этого:
let modelGenerator =
gen {
let incident = new Model()
typeof<Model>.GetProperties()
|> Array.filter (fun p -> p.CanWrite)
|> Array.iter (fun p ->
let! newVal = Arb.generateType p.PropertyType // I wish I could do this
p.SetValue(incident, newVal))
return incident
}
В этом есть две ошибки:
let!
нельзя использовать вне вычислительного выраженияgen
.Arb.generateType
не существует, и я не могу найти способ сделать его эквивалент
Можно ли создать генератор, который будет автоматически устанавливать приватные поля в моей модели?