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

标签 unit-testing struct 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}))
}

Playground :http://play.golang.org/p/G24DbRDQE8 .

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

关于unit-testing - 比较 Go 中的多个结构字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31964309/

相关文章:

python - Django 测试覆盖率与代码覆盖率

c++ - 删除/修改结构数组中的元素

c# - 这是否适合类或结构(速度比内存更重要)?

macos - 设置 GOPATH 时转到 : go get $GOPATH error,

c - go - 使用 cgo 时, `__GI___pthread_mutex_unlock` 占用了大部分执行时间

ios - 如何为 NSNotification 编写单元测试

visual-studio-2008 - Visual Studio 中的有序单元测试有什么意义?

ruby-on-rails - 在 Rails 中引用相同类型的装置

在函数中定义的结构

go - 如何转换(类型 *bytes.Buffer)以用作 w.Write 参数中的 []byte