2016-02-19 13 views
6

Buduję równoległą jednostkę testową za pomocą MailBoxProcessor.Czy można przekazać Printf.TextWriterFormat do MailBoxProcessor?

Muszę umieścić w kolejce instrukcje drukowania dla testu, więc mogę je wydrukować po zakończeniu testu. Wiem, jak wysłać ciąg znaków i utworzyć listę, aby móc je wydrukować, ale to zmusza mnie do użycia sprintf i wstawienia go do mojej funkcji drukowania i nie jest tak czysty, jak bym chciał.

[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())) 

Można zobaczyć pełny kod tutaj: https://github.com/lefthandedgoat/prunner/blob/master/Program.fs#L36-L41

i zobaczyć, że ctx to obiekt z printfn metody, która pobiera ciąg i księguje je do jednej skrzynki pocztowej, która kolejkuje górę wiadomości aż do powstania testów jest zrobione, potem pętle nad nimi i je drukuje.

Moim celem jest mieć ctx.printfn wyglądać następująco

[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())) 

Odpowiedz

7

Twoje pytanie nie jest do końca jasne, ale może być w stanie osiągnąć swój cel poprzez kprintf:

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

Nicea, ja o tym nie wiedziałem! Przyda się w przyszłości, dzięki. – Roujo

+0

To działa! Dziękuję bardzo, przeczytam teraz o kprintf! – lefthandedgoat

Powiązane problemy