Wie testen Sie eine Funktion Ausgabe (stdout/stderr) in Go unit-tests

Habe ich eine einfache Funktion, die ich testen möchte:

func (t *Thing) print(min_verbosity int, message string) {
    if t.verbosity >= minv {
        fmt.Print(message)
    }
}

Aber wie kann ich testen, was die Funktion eigentlich sendet auf der standard-Ausgabe? Test::Output tut, was ich will in Perl. Ich weiß, ich könnte schreiben, die alle meine eigene boilerplate, das gleiche zu tun in der Go (wie beschrieben hier):

orig = os.Stdout
r,w,_ = os.Pipe()
thing.print("Some message")
var buf bytes.Buffer
io.Copy(&buf, r)
w.Close()
os.Stdout = orig
if(buf.String() != "Some message") {
    t.Error("Failure!")
}

Aber das ist viel zusätzliche Arbeit für jeden einzelnen test. Ich hoffe, es gibt ein standard-Art, oder vielleicht eine Abstraktion, die Bibliothek zu handhaben.

InformationsquelleAutor Flimzy | 2014-11-07
Schreibe einen Kommentar