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

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

多返回值函數的表測試

多返回值函數的表測試

Go
幕布斯6054654 2021-11-29 16:35:00
我在 Go 上咬牙切齒,在深入研究表驅動測試后,我遇到了以下問題:我有一個返回多個值的函數// Halves an integer and and returns true if it was even or false if it was odd.func half(n int) (int, bool) {    h := n / 2    e := n%2 == 0    return h, e}我知道half(1)返回值應該是0, false并且half(2)它應該匹配1, true,但我似乎無法弄清楚如何將它放在桌子上。怎么會有類似于以下內容的東西?var halfTests = []struct {    in  int    out string}{    {1, <0, false>},    {3, <1, true>},}有沒有其他更慣用的方法來做到這一點?作為參考,這里有一個類似于 FizzBuzz 函數的測試,使用表:var fizzbuzzTests = []struct {    in  int    out string}{    {1, "1"},    {3, "Fizz"},    {5, "Buzz"},    {75, "FizzBuzz"},}func TestFizzBuzz(t *testing.T) {    for _, tt := range fizzbuzzTests {        s := FizzBuzz(tt.in)        if s != tt.out {            t.Errorf("Fizzbuzz(%d) => %s, want %s", tt.in, s, tt.out)        }    }}
查看完整描述

1 回答

?
哆啦的時光機

TA貢獻1779條經驗 獲得超6個贊

只需將另一個字段添加到保存第二個返回值的結構中。例子:


var halfTests = []struct {

    in   int

    out1 int

    out2 bool

}{

    {1, 0, false},

    {3, 1, true},

}

您的測試功能如下所示:


func TestHalf(t *testing.T) {

    for _, tt := range halfTests {

        s, t := half(tt.in)

        if s != tt.out1 || t != tt.out2 {

            t.Errorf("half(%d) => %d, %v, want %d, %v", tt.in, s, t, tt.out1, tt.out2)

        }

    }

}


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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