2016-02-19 27 views
6

我正在构建一个使用MailBoxProcessor的并行单元测试运行器。可能将Printf.TextWriterFormat传递给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())) 

回答

7

你的问题是不完全清楚,但你可以通过kprintf能够实现自己的目标:

member x.printfn fmtStr = 
    Printf.kprintf (fun msg -> reporter.Post(Print(msg, x.TestId))) fmtStr 
+0

不错,我不知道那个!它将在未来派上用场,谢谢。 – Roujo

+0

这个工程!非常感谢,我现在就去看看kprintf! – lefthandedgoat

相关问题