这是一个小脚本。
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/