我想知道是否有一种通用的方法可以对相当大的结构的值进行单元测试,而不必在彼此下面编写许多 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}))
}
Playground :http://play.golang.org/p/G24DbRDQE8 .
任何比这更奇特的东西很可能需要您定义自己的相等方法。
关于unit-testing - 比较 Go 中的多个结构字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31964309/