gpt4 book ai didi

unit-testing - Golang 单元测试用户输入

转载 作者:IT王子 更新时间:2023-10-29 02:04:51 24 4
gpt4 key购买 nike

我正在尝试以 TDD 思维方式学习围棋。我被困在测试中。

在下面的示例中,我提示用户输入,进行一些验证并打印结果。我为它写了一个测试(通过了)但是我觉得它没有达到验证部分,所以我做错了什么。任何建议将不胜感激。

https://play.golang.org/p/FDpbof9Y20

package main

import (
"bufio"
"fmt"
"io"
"os"
"regexp"
"strings"
)

func main() {
response := askQuestion("What is your name?")
fmt.Printf("Hello %s\n",response)
}

func askQuestion(question string) string {
reader := bufio.NewReader(os.Stdin)
answer := ""

for {
fmt.Printf("%s\n", question)
input, err := reader.ReadString('\n')
if err != nil {
if err != io.EOF {
panic(err)
}
break
}

if regexp.MustCompile(`[A-Z]{5}`).MatchString(strings.TrimSpace(input)) == true {
answer = strings.TrimSpace(input)
fmt.Printf("You entered %s\n", answer)
break
} else {
fmt.Printf("\033[31mYou must enter only 5 upper case letters.\n\033[0m")
continue
}
}

return answer
}

https://play.golang.org/p/WcI4CRfle5

package main

import (
"bytes"
"fmt"
"io"
"io/ioutil"
"os"
"reflect"
"strings"
"testing"
)

func TestAskQuestion(t *testing.T) {
expected := "foo"
entered := "foo"

askQuestion("What is your last name?")

oldStdout := os.Stdout
r, w, _ := os.Pipe()

os.Stdout = w
fmt.Println(entered)

outC := make(chan string)
go func() {
var buf bytes.Buffer
io.Copy(&buf, r)
outC <- buf.String()

}()

w.Close()
os.Stdout = oldStdout
out := strings.TrimSpace(<-outC)

b, _ := ioutil.ReadAll(os.Stdin)
t.Log(string(b))

if !reflect.DeepEqual(expected, out) {
t.Fatalf("Test Status Failure Issue. Got: '%v' expected %s", out, expected)
}
}

最佳答案

Go 的测试需要存在于名为 xyz_test.go 的文件中,因此 playground 不是熟悉单元测试功能的合适场所。

如果您已经在本地安装了 go,请运行命令 go help test,以获得非常简短的介绍。

关于unit-testing - Golang 单元测试用户输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34346496/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com