亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

通過多次傳遞輸入來測試函數

通過多次傳遞輸入來測試函數

Go
HUH函數 2022-11-08 15:36:52
我正在通過測試學習圍棋。從“Head First Go”的第 2 章末尾,我得到了以下程序。它讓用戶嘗試從 1 到 10 猜測一個數字 3 次:guess.gopackage mainimport (    "fmt"    "math/rand"    "time"    "bufio"    "os"    "log"    "strconv"    "strings")func generateRandomNumber() int {    rand.Seed(time.Now().Unix())       // seed value based on time to generate non-deterministic random values    randomNum := rand.Intn(10) + 1     // range: [0, 10); produces the same value without Seed(), i.e., pseudo-random    return randomNum}func guess() int {    var success bool = false    target := generateRandomNumber()    fmt.Println("Guess a number between 1 and 10")    guess  := bufio.NewReader(os.Stdin)    for attempts := 0; attempts < 3; attempts++ {        fmt.Println("You have", 3-attempts, "guesses left")        userVal, err := guess.ReadString('\n')        if err != nil {            log.Fatal(err)        }            input := strings.TrimSpace(userVal)        answer, err := strconv.Atoi(input)        if err != nil {            log.Fatal(err)        }            if answer == target {            fmt.Println("Congratulations !!")            return answer        } else if answer > target {            fmt.Println("Your guess was HIGHER")        } else if answer < target {            fmt.Println("Your guess was LOWER")        }    }    if !success {        fmt.Printf("Sorry, you've run out of attempts... The correct value is %d\n", target)        return target       }    return 0}func main() {    guess()}guess_test.gopackage mainimport (    "testing")func TestRandomNumber(t *testing.T) {    want := generateRandomNumber()        if 7 != want {        t.Fail()        t.Logf("Incorrect guess; The random number was %d", want)    }}如何guess()通過傳入三個不同的輸入進行測試?我想通過比較 with 的返回值來進行guess()測試generateRandomNumber()。
查看完整描述

1 回答

?
繁花如伊

TA貢獻2012條經驗 獲得超12個贊

您可以更改guess函數以從輸入中獲取閱讀器,這樣我們就可以將它傳遞給我們想要的任何閱讀器:在主要我們通過stdin閱讀器,在測試中我們通過模擬閱讀器:


guess.go


package main


import (

    "bufio"

    "fmt"

    "log"

    "math/rand"

    "os"

    "strconv"

    "strings"

    "time"

)


func generateRandomNumber() int {

    rand.Seed(time.Now().Unix())   // seed value based on time to generate non-deterministic random values

    randomNum := rand.Intn(10) + 1 // range: [0, 10); produces the same value without Seed(), i.e., pseudo-random

    return randomNum

}


func guess(reader *bufio.Reader) (int, error) {

    target := generateRandomNumber()


    fmt.Println("Guess a number between 1 and 10")


    for attempts := 0; attempts < 3; attempts++ {

        fmt.Println("You have", 3-attempts, "guesses left")

        userVal, err := reader.ReadString('\n')

        if err != nil {

            log.Fatal(err)

        }


        input := strings.TrimSpace(userVal)

        answer, err := strconv.Atoi(input)

        if err != nil {

            log.Fatal(err)

        }


        if answer == target {

            fmt.Println("Congratulations !!")

            return answer, nil

        } else if answer > target {

            fmt.Println("Your guess was HIGHER")

        } else if answer < target {

            fmt.Println("Your guess was LOWER")

        }

    }


    fmt.Printf("Sorry, you've run out of attempts... The correct value is %d\n", target)

    return target, fmt.Errorf("attempts is over")

}


func main() {

    reader := bufio.NewReader(os.Stdin)

    guess(reader)

}

用于檢測:


guess_test.go


package main


import (

    "bufio"

    "fmt"

    "strings"

    "testing"

)


func TestRandomNumberOk(t *testing.T) {

    want := generateRandomNumber()

    msg := fmt.Sprintf("3\n4\n%d\n", want)

    reader := strings.NewReader(msg)

    r := bufio.NewReader(reader)

    _, err := guess(r)

    if err != nil {

        t.Errorf("guess must successfull")

    }

}


func TestRandomNumberFail(t *testing.T) {

    want := generateRandomNumber()

    msg := fmt.Sprintf("3\n4\n%d\n", want+1)

    reader := strings.NewReader(msg)

    r := bufio.NewReader(reader)

    _, err := guess(r)

    if err == nil {

        t.Errorf("guess must unsuccessfull")

    }

}

我不得不更改您的猜測返回值,因為它何時成功與否未知


查看完整回答
反對 回復 2022-11-08
  • 1 回答
  • 0 關注
  • 118 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號