比较Go中的多个struct字段

jbr*_*ans 5 struct unit-testing go

我想知道是否存在一种通用的方法来对相当大的结构的值进行单元测试,而不必在彼此之间编写许多if语句。我知道在Go中我们可以使用表驱动的单元测试,但是我还没有找到如何用结构实现这种表驱动的方法的方法。

我的目标是创建一个结构,对其进行处理,然后对结构的新值进行单元测试。有人知道如何通过表驱动的测试来实现这一目标,或者是否有更好的方法来做到这一点?

Ain*_*r-G 5

如果需要检查所有字段,只需比较结构即可:

type S struct {
    A int
    B float64
}

func main() {
    fmt.Println(S{1, 3.14} == S{1, 3.14}) // Prints true.
}
Run Code Online (Sandbox Code Playgroud)

但请注意,如果您的结构体包含指针,这可能会变得棘手,因为它们可能指向两个不同但相等的值。在这种情况下,您可以使用reflect.DeepEqual

type S2 struct {
    A int
    B *float64
}

func main() {
    var f1, f2 = 3.14, 3.14
    // Prints false because the pointers differ.
    fmt.Println(S2{1, &f1} == S2{1, &f2})
    // Prints true.
    fmt.Println(reflect.DeepEqual(S2{1, &f1}, S2{1, &f2}))
}
Run Code Online (Sandbox Code Playgroud)

游乐场:http://play.golang.org/p/G24DbRDQE8

任何比这更奇特的东西很可能需要您定义自己的相等方法。