首页  >  文章  >  后端开发  >  可以从非测试文件中调用 Go 测试函数吗?

可以从非测试文件中调用 Go 测试函数吗?

DDD
DDD原创
2024-10-25 15:55:02123浏览

Can You Call Go Test Functions From Non-Test Files?

从非测试文件调用测试函数

在 Go 中,测试依赖于特定的约定和方法。这些约定之一是测试应该分成自己的测试文件,并且必须以“_test.go”后缀结尾。

可以从非测试文件调用测试函数吗?

简短回答:不。

与您的问题相反,测试函数不能直接从非测试 Go 文件调用。这种分离确保了测试与被测代码保持不同且独立。

Go 中的测试模式

Go 主要采用两种类型的单元测试:

  • 黑盒测试:评估公共、导出函数,模仿外部调用者如何与它们交互。
  • 白盒测试:评估私有函数,同一包中未导出的函数,提供对内部操作的更深入的了解。

示例

考虑以下带有导出的“Sum”的“示例”包函数和未导出的“add”函数:

package example

func Sum(nums ...int) int {
    sum := 0
    for _, num := range nums {
        sum = add(sum, num)
    }
    return sum
}

func add(a, b int) int {
    return a + b
}

黑盒测试 (example_test.go):

package example_test

import (
    "testing"

    "example"
)

func TestSum(t *testing.T) {
    tests := []struct {
        nums []int
        sum  int
    }{
        {nums: []int{1, 2, 3}, sum: 6},
        {nums: []int{2, 3, 4}, sum: 9},
    }

    for _, test := range tests {
        s := example.Sum(test.nums...)
        if s != test.sum {
            t.FailNow()
        }
    }
}

白盒测试(example_internal_test.go):

package example_test

import "testing"

func TestAdd(t *testing.T) {
    tests := []struct {
        a   int
        b   int
        sum int
    }{
        {a: 1, b: 2, sum: 3},
        {a: 3, b: 4, sum: 7},
    }

    for _, test := range tests {
        s := add(test.a, test.b)
        if s != test.sum {
            t.FailNow()
        }
    }
}

总之,从非测试文件调用测试函数违反了 Go 测试的原则。应使用单独的测试包进行单元测试,并遵守既定的工作流程和约定。

以上是可以从非测试文件中调用 Go 测试函数吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn