第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

go - golang 測試參數(shù)化

go - golang 測試參數(shù)化

Go
拉丁的傳說 2023-01-03 10:08:44
在 python 中我可以很容易地做到@pytest.mark.parametrize('input, expected', [(1, 2), [2, 3]])def test_tutu(input, expected):    assert input + 1 == expected我怎樣才能在 golang 中做同樣的事情?沒有給自己寫一個循環(huán)func tutu(a int) int {    return a + 1}func Test_tutu(t *testing.T) {    tests := []struct {        input    int        expected int    }{        {input: 1, expected: 2},        {input: 2, expected: 3},    }    for _, tt := range tests {        t.Run("", func(t *testing.T) {            assert.Equal(t, tutu(tt.input), tt.expected)        })    }}那么 golang 中的這個 python parametrize 相當于什么?def parametrize(all_args_name: str, all_values: List[Any], fn: Callable):    args_name = all_args_name.split(',')    for values in all_values:        args = {k: v for k, v in zip(args_name, values)}        fn(**args)
查看完整描述

2 回答

?
慕后森

TA貢獻1802條經驗 獲得超5個贊

我找到了一種使用反射的方法


func parametrize[V any, T any](fn T, allValues [][]V) {

    v := reflect.ValueOf(fn)

    for _, a := range allValues {

        vargs := make([]reflect.Value, len(a))


        for i, b := range a {

            vargs[i] = reflect.ValueOf(b)

        }

        v.Call(vargs)

    }

}


func tutu(a int) int {

    return a + 1

}


func Test_tutu(t *testing.T) {

    testsArgs := [][]any{

        {t, 1, 2}, {t, 3, 4},

    }

    test := func(t *testing.T, input int, expected int) {

        assert.Equal(t, tutu(input), expected)

    }

    parametrize(test, testsArgs)

}


查看完整回答
反對 回復 2023-01-03
?
慕少森

TA貢獻2019條經驗 獲得超9個贊

GO 擁有的最接近的東西是subtests,但你仍然需要編寫for循環(huán),就像你在第二個例子中所做的那樣。



查看完整回答
反對 回復 2023-01-03
  • 2 回答
  • 0 關注
  • 134 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號