进行测试<功能>返回未定义:<功能>

时间:2019-02-08 11:02:58

标签: go testing

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

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

我正在学习golang入门课程。我们的老师分发了一个代码文件sum.go和一个测试文件sum_test.go。尝试在sum_test.go上运行“ go test”会返回上述错误。该代码在我们的教师Mac上运行良好,并且他在重现问题上遇到困难。这是我的环境设置: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。

1 个答案:

答案 0 :(得分:3)

$ go help packages
     

许多命令适用于一组软件包:

go action [packages]
     

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

     

作为根路径或以开头的导入路径。要么 ..   元素被解释为文件系统路径并表示包   在该目录中。

     

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

     

如果未提供导入路径,则该操作将应用于   当前目录。

     

在特殊情况下,如果程序包列表是来自   单个目录,该命令应用于单个合成   软件包完全由这些文件组成,而忽略了任何构建约束   在这些文件中,而忽略目录中的任何其他文件。


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

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
}