GO 中的测试列表

我正在尝试在 GO 中实施测试。但是我正在努力处理结构中列表的语法。


package primeFactor


import "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'

我感谢您的帮助。谢谢。


Smart猫小萌
浏览 283回答 3
3回答

临摹微笑

你当初为什么这么写?那不是 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}},}该规范可读性很强,而且没有人们想象的那么可怕。您可能想要全面了解它并将其放在附近以供参考。

慕容708150

...为了完整起见,这里只是编写您自己的函数的一个简单示例,您的测试可以调用该函数来比较切片:func slicesMatch(a, b []int) bool {&nbsp; &nbsp; la := len(a)&nbsp; &nbsp; lb := len(b)&nbsp; &nbsp; if la != lb {&nbsp; &nbsp; &nbsp; &nbsp; return false&nbsp; &nbsp; }&nbsp; &nbsp; for i := 0; i < la; i++ {&nbsp; &nbsp; &nbsp; &nbsp; if a[i] != b[i] {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return false&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }&nbsp; &nbsp; return true}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go