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

你可以在 Go 中从测试文件外部调用测试函数吗?

Patricia Arquette
Patricia Arquette原创
2024-10-26 06:32:02973浏览

Can You Call a Test Function from Outside a Test File in Go?

你可以从测试文件外部调用测试函数吗?

在 Go 中,单元测试通常使用 go test 运行,它识别并执行标记为的测试函数测试.T 参数。然而,问题出现了:可以从非测试文件调用测试函数来启动测试执行吗?

答案:框架限制

不幸的是,答案是否定的。 Go 的测试框架旨在强制测试和非测试代码之间的分离。测试函数只能从测试文件中调用,并且被测试的单元必须从适当的包中导入。

Go 中的测试模式

Go 支持两种主要测试模式:

  • 黑盒测试:测试从包外部导出的函数,模拟其他包如何与它们交互。
  • 白盒测试: 从包内测试未导出的函数,提供对内部实现细节的访问。

将其付诸实践

考虑一个名为 example 的示例包,其中包含 add 实用函数和导出的 Sum利用内部 add 函数的函数。

example.go:包含导出和未导出函数的软件包

<code class="go">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
}</code>

example_test.go 中的黑盒测试

<code class="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()
        }
    }
}</code>

example_internal_test.go 中的白盒测试

<code class="go">package example

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()
        }
    }
}</code>

总之,由于测试代码和非测试代码之间的设计分离,从测试文件外部调用测试函数是不可能的在围棋中。单元测试应始终通过 go test 命令执行,确保关注点分离并防止意外的代码执行。

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

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