我正在尝试使用 FsCheck 初始化我的模型实体。模型存在于 C# 中,通常通过实体框架通过它们的私有设置器进行初始化。例如(人为):
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
不存在,我找不到等效的方法
是否可以创建一个自动在我的模型上设置私有字段的生成器?