首页 > 后端开发 > Golang > 正文

如何测试 Go 中未导出的函数?

Mary-Kate Olsen
发布: 2024-10-26 05:47:02
原创
873 人浏览过

How Can You Test Unexported Functions in Go?

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

在 Go 中,不应从代码本身调用测试函数。相反,单元测试应该使用 go test 来执行。命令。

黑白盒测试

Go 支持两种类型的单元测试:黑盒和白盒。

黑盒测试 测试从包外部导出的函数,模拟外部包如何与其交互。

白盒测试 测试包本身内部未导出的函数。

示例

考虑一个名为 example 的包,其中包含导出的函数 Sum 和未导出的实用函数 add。

<code class="go">// example.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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!