gpt4 book ai didi

go - 是否可以从另一个文件调用测试 Func 来开始测试

转载 作者:行者123 更新时间:2023-12-01 22:27:30 25 4
gpt4 key购买 nike

是否可以从非测试 go 文件调用测试函数来开始执行测试?

例如,我有一个测试函数:

package API

import "testing"

func TestAPI(t *testing.T) {
...
}

我需要从非测试 go 文件中调用它。

package main

import "../API"

API.TestAPI()

我可以吗?

最佳答案

Go 中有一些很棒的测试模式。不幸的是,您尝试测试的方式行不通。

您的单元测试应该使用命令 go test <pkg 运行。 .永远不要从代码本身中调用测试。

Go 中通常有两种主要的单元测试形式——黑盒单元测试和白盒单元测试。

White-box testing: Testing unexported functions from within the package itself.

Black-box testing: Testing exported functions from outside the package, emulating how other packages will interact with it.

如果我有包裹,example ,我想测试一下。有一个简单的 exported 函数,它对提供的数字列表求和。 Sum 还使用了一个未导出 实用功能。功能。

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
}

example_test.go:黑盒测试

请注意,我正在测试 example包,但测试位于 example_test包裹。添加 _test让 Go 编译器满意并让它知道这是 example 的测试包.在这里,我们只能访问导出的变量和函数,这让我们可以测试外部包在导入和使用我们的 example 时会遇到的行为。包。

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:白盒测试

请注意,我正在测试 example包,测试也位于 example包裹。这允许单元测试访问未导出的变量和函数。

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

我希望这能让您更好地了解 Go 的测试框架是如何设置和使用的。为简单起见,我没有在示例中使用任何外部库,尽管帮助单元测试的一个非常流行且功能强大的包是 github.com/stretchr/testify .

关于go - 是否可以从另一个文件调用测试 Func 来开始测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59064256/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com