Unit testing 比较Go中的多个结构字段

Unit testing 比较Go中的多个结构字段,unit-testing,struct,go,Unit Testing,Struct,Go,我想知道是否有一种通用的方法可以对一个相当大的结构的值进行单元测试,而不必在每个结构下面写很多if语句。我知道在Go中我们可以使用表驱动的单元测试,但我还没有找到如何用结构实现这种表驱动的方法 我的目标是创建一个结构,使用它做一些事情,并对结构的新值进行单元测试。是否有人知道我如何通过表驱动测试实现这一点,或者是否有更好的方法来实现这一点?如果需要检查所有字段,只需比较结构: type S struct { A int B float64 } func main() {

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


我的目标是创建一个结构,使用它做一些事情,并对结构的新值进行单元测试。是否有人知道我如何通过表驱动测试实现这一点,或者是否有更好的方法来实现这一点?

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

type S struct {
    A int
    B float64
}

func main() {
    fmt.Println(S{1, 3.14} == S{1, 3.14}) // Prints true.
}
但是请注意,如果您的结构包含指针,这可能会很棘手,因为它们可能指向两个不同但相等的值。在这种情况下,您可以使用:

操场:


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

您想检查所有字段,还是只检查其中的一些字段?所有字段,如果只需要检查其中的一些字段,我可以用几个if语句来完成,但对于所有字段,这看起来都不是好的做法。谢谢,特别是对于
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}))
}