[英]Comparing multiple struct fields in Go
我想知道是否有一种通用的单元测试相当大的结构的值的方法,而不必写下很多if语句。 我知道在Go中我们可以使用表驱动的单元测试,但我还没有找到如何使用结构来实现这种表驱动的方法。
我的目标是创建一个结构,用它做一些事情,并对结构的新值进行单元测试。 有没有人知道如何通过表驱动测试实现这一目标,或者是否有更好的方法来实现它?
如果您需要检查所有字段,只需比较结构:
type S struct {
A int
B float64
}
func main() {
fmt.Println(S{1, 3.14} == S{1, 3.14}) // Prints true.
}
请注意,如果你的结构包含指针,那可能会变得棘手,因为它们可能指向两个不同但相等的值。 在这种情况下,您可以使用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}))
}
游乐场: http : //play.golang.org/p/G24DbRDQE8 。
任何比这更好的东西很可能要求你定义自己的平等方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.