这是一个小脚本。

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会打印出我期望的样子吗?

最佳答案

什么是“测试”?

我认为“测试”需要对函数的输出产生影响。

您函数的输出为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)
}

因此,您可以检查输出格式,拼写等。

关于unit-testing - 如何对文本显示在屏幕中央进行单元测试?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42096238/

10-17 01:38