首頁 > 後端開發 > Golang > 交互測試 cli 提示時出現問題,掃描器不等待使用者輸入

交互測試 cli 提示時出現問題,掃描器不等待使用者輸入

WBOY
發布: 2024-02-13 21:18:18
轉載
1210 人瀏覽過

交互测试 cli 提示时出现问题,扫描仪不等待用户输入

php小編魚仔發現,在進行互動測試時,有時會遇到問題。其中一個常見問題是,當使用命令列介面(CLI)進行互動時,掃描器可能不會等待使用者輸入。這表示當提示使用者輸入時,程式會立即繼續執行,而不會等待使用者的回應。這可能導致程式出現錯誤或無法正確執行。解決這個問題的方法是使用適當的技術或方法來確保掃描器等待使用者輸入,以確保互動測試的順利進行。

問題內容

我嘗試編寫一個測試來驗證 cli 提示,模擬使用者輸入以回應某些程式輸出。

如何讓 scanner.scan 等待其餘的寫入?

到目前為止我所擁有的:

    b := &bytes.buffer{}
    fmt.fprint(b, "0")
    go func() {
        time.sleep(1 * time.second)
        for i := 1; i < 4; i++ {
            fmt.fprint(b, i)
            time.sleep(1 * time.second)
        }
    }()

    scanner := bufio.newscanner(b)
    for scanner.scan() {
        log.print(scanner.text())
    }
    if err := scanner.err(); err != nil {
        log.println("problem while scanning:", err)
    }
登入後複製

預期結果為:0123

實際結果為:0

#我嘗試了 io.pipe 的版本

r, w := io.Pipe()
    fmt.Fprint(w, "0")
    go func() {
        time.Sleep(1 * time.Second)
        for i := 1; i < 4; i++ {
            fmt.Fprint(w, i)
            time.Sleep(1 * time.Second)
        }
    }()

    scanner := bufio.NewScanner(r)
    for scanner.Scan() {
        log.Print(scanner.Text())
    }
    if err := scanner.Err(); err != nil {
        log.Println("problem while scanning:", err)
    }
登入後複製

結果:致命錯誤:所有 goroutine 都在休眠 - 死鎖!

解決方法

使用管道時,寫入和讀取是同步的。如果沒有匹配的讀取,寫入就無法完成。將第一個寫入移至 goroutine 中。並關閉管道的寫入端,讓掃描器停止掃描。

    r, w := io.Pipe()
    go func() {
        defer w.Close()

        fmt.Fprint(w, "0")

        time.Sleep(1 * time.Second)
        for i := 1; i < 4; i++ {
            fmt.Fprint(w, i)
            time.Sleep(1 * time.Second)
        }
    }()

    scanner := bufio.NewScanner(r)
    for scanner.Scan() {
        log.Print(scanner.Text())
    }
    if err := scanner.Err(); err != nil {
        log.Println("problem while scanning:", err)
    }
登入後複製

以上是交互測試 cli 提示時出現問題,掃描器不等待使用者輸入的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:stackoverflow.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板