Ich habe eine einfache Funktion möchte ich Test:Wie eine Funktion der Ausgabe (stdout/stderr) in Go-Einheit testen Tests
func (t *Thing) print(min_verbosity int, message string) {
if t.verbosity >= minv {
fmt.Print(message)
}
}
Aber wie kann ich testen, was die Funktion tatsächlich sendet an die Standardausgabe? Test::Output macht was ich will in Perl. Ich weiß, ich könnte alle meine eigenen Textvorschlag schreiben das gleiche in Gehen Sie zu tun (wie here beschrieben):
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 eine Menge zusätzlicher Arbeit für jeden einzelnen Test. Ich hoffe, es gibt einen Standardweg oder vielleicht eine Abstraktionsbibliothek, um damit umzugehen.
Dies ist wahrscheinlich, was ich tun werde, da es eine allgemeinere Lösung als die von @ Ainar-G ist, die erfordert, dass ich den gesamten Code kontrolliere, der etwas ausgeben könnte. – Flimzy