我正在尝试使用 FsCheck 初始化我的模型实体。这些模型位于 C# 中,通常通过实体框架的私有设置器进行初始化。例如(人为的):
public class Model
{
public string One { get; private set; }
public int Two { get; private set; }
}
Run Code Online (Sandbox Code Playgroud)
我想创建一个 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
}
Run Code Online (Sandbox Code Playgroud)
这有两个问题:
let!之外使用gen。Arb.generateType不存在,而且我找不到一种方法来做到这一点是否可以创建一个生成器来自动在我的模型上设置私有字段?
考虑一个简单的F#控制台应用程序,它回应传递给它的命令行参数,每行一个命令:
[<EntryPoint>]
let main argv =
argv |> Array.iter (printfn "%s")
0
Run Code Online (Sandbox Code Playgroud)
如果我将此程序传递给带有斜杠的目录路径,它会将斜杠视为转义字符,从而产生意外结果:
> app.exe "c:\some path\" "c:\another path"
c:\some path" c:\another
path
Run Code Online (Sandbox Code Playgroud)
如何在不将斜杠解释为转义字符的情况下检索命令行参数?