2017-02-07 6 views
0

これはちょっとしたスクリプトです。画面の中央にテキストが表示されるように単体テストできますか?

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), 
    ) 
} 

単体テストできますか?どうすればテストできますか?私はナンセンスのテストではないと思います。しかし、...もし私がこのコードをテストするのであれば?私は出力が私が期待しているのと同じであることをどのようにテストできますか?

fmtが期待どおりに印刷するかどうかテストできますか?

答えて

0

"テスト"とはどういう意味ですか?

"テスト"の必要性は、関数の出力に影響すると考えます。

関数の出力はStdoutですので、まず出力を取得する必要があります。

我々は、単にこれを行うことができます:

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) 
} 

をこのように、あなたは、出力形式を確認することができ、スペルなど

関連する問題