为了账号安全,请及时绑定邮箱和手机立即绑定

GO 中的测试列表

GO 中的测试列表

Go
Smart猫小萌 2021-09-13 10:52:31
我正在尝试在 GO 中实施测试。但是我正在努力处理结构中列表的语法。package primeFactorimport "testing"var testCases = []struct {    p        int    expected []int}{    {15, [3,5]},    {26, [2,13]},    {37, [37]},    {42, [2,3,7]},}func TestPrimeFactor(t *testing.T) {    for _, test := range testCases {        observed := PrimeFactor(test.p)        if observed != test.expected {            t.Error("For p = %d, expected %t. Got %t.",                test.p, test.expected, observed)        }    }}我的输出错误是:expected ']', found ',': expected operand, found '{': expected ';', found 'for'我感谢您的帮助。谢谢。
查看完整描述

3 回答

?
临摹微笑

TA贡献1982条经验 获得超2个赞

你当初为什么这么写?那不是 Go 语法。从规范:


切片文字描述了整个底层数组文字。因此,切片文字的长度和容量是最大元素索引加一。切片文字具有以下形式


[]T{x1, x2, … xn}

所以,在你的情况下:


var testCases = []struct {

    p        int

    expected []int

}{

    {15, []int{3, 5}},

    {26, []int{2, 13}},

    {37, []int{37}},

    {42, []int{2, 3, 7}},

}

该规范可读性很强,而且没有人们想象的那么可怕。您可能想要全面了解它并将其放在附近以供参考。


查看完整回答
反对 回复 2021-09-13
?
慕容708150

TA贡献1831条经验 获得超4个赞

...为了完整起见,这里只是编写您自己的函数的一个简单示例,您的测试可以调用该函数来比较切片:


func slicesMatch(a, b []int) bool {

    la := len(a)

    lb := len(b)


    if la != lb {

        return false

    }


    for i := 0; i < la; i++ {

        if a[i] != b[i] {

            return false

        }

    }


    return true

}


查看完整回答
反对 回复 2021-09-13
  • 3 回答
  • 0 关注
  • 282 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信