我正在使用MailBoxProcessor构建并行单元测试运行器。
我需要为测试排队打印语句,所以我可以在测试完成后打印它们。我知道如何发送一个字符串并建立一个列表,以便我可以打印它们,但这迫使我使用sprintf
并将其传输到我的打印功能中,并不像我想的那样干净。
[1..200]
|> List.iter (fun i ->
sprintf "Test %i" i &&& fun ctx ->
ctx.printfn <| sprintf "A guid %A" (ng())
ctx.printfn <| sprintf "I am test %i" i
ctx.printfn <| sprintf "A guid %A" (ng()))
您可以在此处查看完整代码: https://github.com/lefthandedgoat/prunner/blob/master/Program.fs#L36-L41
并且看到ctx
是一个带有printfn
方法的对象,它接受一个字符串并将其发布到一个邮箱,该邮箱将消息排队直到测试完成,然后循环遍历它们并打印它们。
我的目标是让ctx.printfn
看起来像这样
[1..200]
|> List.iter (fun i ->
sprintf "Test %i" i &&& fun ctx ->
ctx.printfn "A guid %A" (ng())
ctx.printfn "I am test %i" i
ctx.printfn "A guid %A" (ng()))
答案 0 :(得分:7)
您的问题并不完全清楚,但您可以通过kprintf实现目标:
member x.printfn fmtStr =
Printf.kprintf (fun msg -> reporter.Post(Print(msg, x.TestId))) fmtStr