2017-02-07 1 views
0

Dies ist ein kleines Skript in go.Wie kann ich Unit testen, dass ein Text in der Mitte des Bildschirms erscheint?

package bashutil 

import (
    "fmt" 
    "github.com/nsf/termbox-go" 
) 

func Center(s string) { 
    if err := termbox.Init(); err != nil { 
     panic(err) 
    } 
    w, _ := termbox.Size() 
    termbox.Close() 
    fmt.Printf(
     fmt.Sprintf("%%-%ds", w/2), 
     fmt.Sprintf(fmt.Sprintf("%%%ds", w/2+len(s)/2), s), 
    ) 
} 

Kann ich das Gerät testen? Wie kann ich es testen? Ich denke, ein Unsinnstest ist ein Schnipsel so wenig. Aber, ... Was wäre, wenn ich diesen Code testen würde? Wie kann ich testen, dass eine Ausgabe gleich ist, wie ich es erwarte?

Kann ich testen, dass fmt etwas druckt, wie ich es erwarte?

Antwort

0

Was bedeutet "Test"?

Ich denke, "Test" muss Auswirkungen auf die Ausgabe einer Funktion haben.

Die Ausgabe Ihrer Funktion ist Stdout, also müssen wir zuerst den Ausgang bekommen.

Wir können dies einfach tun:

func TestCenter(*testing.T) { 
    stdoutBak := os.Stdout 
    r, w, _ := os.Pipe() 
    os.Stdout = w 

    Center("hello") 
    w.Close() 
    os.Stdout = stdoutBak 

    // Check output as a byte array 
    outstr, _ := ioutil.ReadAll(r) 
    fmt.Printf("%s", outstr) 
} 

So können Sie Ausgabeformat überprüfen, Rechtschreibung usw.

Verwandte Themen