1

大家,我对我所看到的感到困惑;我有以下内容tree

├── go.mod
├── main.go
└── server
    ├── server.go
    └── server_integration_test.go

假设我的模块名称 ( mod.go) 是gotest. 内容server.go

package server

type MyStruct struct {
    Hello string
}

func (m MyStruct) SayHello() string {
    return m.Hello
}

内容server_integration_test.go

package server_integration_test

import (
    "testing"
)

func TestIntegration(t *testing.T) {
    t.Errorf("just gonna fail!")
}

最后是我的main.go`:

package main

import (
    "fmt"
    "gotest/server"
)

func main() {
    my := server.MyStruct{Hello: "my-struct"}
    fmt.Println("from mystruct", my.SayHello())
}

当我运行go build(或go test ./...)时,我收到以下错误:

main.go:5:2: found packages server (server.go) and server_integration (server_integration_test.go) in /tmp/gotest/server

但是,如果我将我的更改server_integration_test.go为:

package server_test
// ...

一切正常。

有人可以解释一下这里发生了什么吗?

4

1 回答 1

2

server包测试支持的包名称是serverserver_test

查看测试包

'Go test' 重新编译每个包以及名称与文件模式“*_test.go”匹配的任何文件。这些附加文件可以包含测试函数、基准函数和示例函数。...

声明带有后缀“_test”的包的测试文件将被编译为单独的包,然后与主测试二进制文件链接并运行。

_test后缀应用于被测包的名称(可以改进文档以使这一事实更加明确)。

于 2020-04-25T21:33:23.343 回答