【问题标题】:Go test <function> returns undefined: <function>去测试 <function> 返回 undefined: <function>
【发布时间】:2021-09-27 14:12:22
【问题描述】:

尝试运行“go test sum_test.go”返回错误:

./sum_test.go:18:13: 未定义: SumInt8 FAIL 命令行参数 [构建失败]

我正在学习 golang 入门课程。我们的老师分发了一个代码文件 sum.go 和一个测试文件 sum_test.go。尝试在 sum_test.go 上运行“go test”会返回上述错误。代码在我们的教师 Mac 上运行良好,但他在重现问题时遇到了困难。这是我的 Go 环境设置:https://pastebin.com/HcuNVcAF

sum.go

package sum

func SumInt8(a, b int8) int8 {
  return a + b
}

func SumFloat64(a, b float64) float64 {
  return a + b
}

sum_test.go

package sum

import "testing"

// Check https://golang.org/ref/spec#Numeric_types and stress the limits!
var sum_tests_int8 = []struct{
  n1       int8
  n2       int8
  expected int8
}{
  {1, 2, 3},
  {4, 5, 9},
  {120, 1, 121},
}

func TestSumInt8(t *testing.T) {
for _, v := range sum_tests_int8 {
    if val := SumInt8(v.n1, v.n2); val != v.expected {
        t.Errorf("Sum(%d, %d) returned %d, expected %d", 
v.n1, v.n2, val, v.expected)
    }
  }
}

我没有看到特别的错误,所以我希望“go test sum_test.go”能够运行并成功。但是似乎在 sum.go 中找不到方法 SumInt8。

【问题讨论】:

  • go test 的参数是,而不是文件。这与构建和安装命令相同。试试go test . 或简单的go test(或者,如果你真的想,列出构建测试所需的所有文件)。

标签: go testing


【解决方案1】:
$ go help packages

许多命令适用于一组包:

go action [packages]

通常,[packages] 是导入路径的列表。

作为根路径或以 .或者 .. 元素被解释为文件系统路径并表示包 在那个目录中。

否则,导入路径 P 表示在 GOPATH 环境中列出的某些目录的目录 DIR/src/P 变量(有关详细信息,请参阅:'go help gopath')。

如果没有给出导入路径,则该操作适用于 当前目录。

作为一种特殊情况,如果包列表是 .go 文件的列表,来自 单个目录,该命令应用于单个合成 由这些文件组成的包,忽略任何构建约束 在这些文件中并忽略目录中的任何其他文件。


列出测试使用的当前目录下的所有文件:

go test sum_test.go sum.go

或者只是在当前目录中测试完整的包。

go test

例如,

$ go test -v sum_test.go sum.go
=== RUN   TestSumInt8
--- PASS: TestSumInt8 (0.00s)
PASS
ok      command-line-arguments  0.002s
$ 

或者,对于完整的包

$ go test -v
=== RUN   TestSumInt8
--- PASS: TestSumInt8 (0.00s)
PASS
ok      so/sum  0.002s
$

选项 '-v' 产生详细的输出。

sum_test.go:

package sum

import "testing"

// Check https://golang.org/ref/spec#Numeric_types and stress the limits!
var sum_tests_int8 = []struct {
    n1       int8
    n2       int8
    expected int8
}{
    {1, 2, 3},
    {4, 5, 9},
    {120, 1, 121},
}

func TestSumInt8(t *testing.T) {
    for _, v := range sum_tests_int8 {
        if val := SumInt8(v.n1, v.n2); val != v.expected {
            t.Errorf("Sum(%d, %d) returned %d, expected %d",
                v.n1, v.n2, val, v.expected)
        }
    }
}

sum.go:

package sum

func SumInt8(a, b int8) int8 {
    return a + b
}

func SumFloat64(a, b float64) float64 {
    return a + b
}

【讨论】:

    猜你喜欢
    • 2023-01-24
    • 2015-06-24
    • 1970-01-01
    • 1970-01-01
    • 2015-10-23
    • 2019-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多