如何将 go 模块导入到 /*_test.go 文件中?

如何将我的函数导入到我的测试文件夹中?我在cmd目录中运行,它创建了一个go.mod文件,但是当我尝试在测试中导入它时,我无法访问函数。我在根项目目录中运行,错误是:go mod initmodule "cmd"go test ./testtest/services_test.go:4:2: "cmd" is not an importable package;


myproject

├── cmd

     ├── main.go (package main)

     ├── helper.go (package main)

     └── services.go (package main)

├── test

     ├── helper_test.go (package_main)

     └── services_test.go (package main)

├── go.mod (module cmd)

└── go.sum

在 cmd/services.go 中


package main


func doStuff() { 

  // TODO

}

在测试中/services_test.go


package main


import {

    "cmd"

    "testing"

}


func TestdoStuff (*testing.T) {

    cmd.doStuff()

}


慕运维8079593
浏览 142回答 3
3回答

天涯尽头无女友

给定包的测试应位于该包中,以便它们可以看到该包的未导出变量、字段和方法,并且根本不需要导入该包。不要将它们放在单独的目录中。test如有必要,您可以导入其他包来测试此包,但无法看到其他包中未导出的内容。在这方面,测试与任何其他文件没有什么不同。

慕桂英4014372

正如其他答案中指出的那样,测试文件必须与测试文件位于同一目录中。可以查看教程创建 Go 模块,然后添加测试。以下是这些教程中的示例:myproject├── greetings     ├── greetings.go (package greetings)     ├── greetings_test.go (package greetings)├── go.mod└── go.sum问候语文件:package greetingsimport "fmt"// Hello returns a greeting for the named person.func Hello(name string) string {    // Return a greeting that embeds the name in a message.    message := fmt.Sprintf("Hi, %v. Welcome!", name)    return message}greetings_test.go 文件包含两个测试:package greetingsimport (    "testing"    "regexp")// TestHelloName calls greetings.Hello with a name, checking// for a valid return value.func TestHelloName(t *testing.T) {    name := "Gladys"    want := regexp.MustCompile(`\b`+name+`\b`)    msg, err := Hello("Gladys")    if !want.MatchString(msg) || err != nil {        t.Fatalf(`Hello("Gladys") = %q, %v, want match for %#q, nil`, msg, err, want)    }}// TestHelloEmpty calls greetings.Hello with an empty string,// checking for an error.func TestHelloEmpty(t *testing.T) {    msg, err := Hello("")    if msg != "" || err == nil {        t.Fatalf(`Hello("") = %q, %v, want "", error`, msg, err)    }}

收到一只叮咚

的 已编译项目是二进制文件,该二进制文件是包的下游用户将与之交互的内容。因此,验证 行为的测试应该针对二进制文件本身进行测试,而不是针对用于实现该二进制文件的单个函数进行测试。package mainpackage main可以通过以下方法编写此类测试:使用要运行的包(可能使用标志将二进制文件输出到测试的临时目录),然后使用包执行生成的二进制文件。os/execgo build cmd-oos/exec或者,使用第三方测试包(如 github.com/rogpeppe/testscript)编写更简洁的脚本驱动测试。或者,将任何帮助程序函数分解为内部包,并测试这些包的导出函数。使用上述任何一种方法,给定包的测试仍与该包属于同一目录。这样,当用户运行时,他们可以确信它确实有效 - 如果测试位于不同的包中,他们显然不会知道为了测试包而运行。go test cmdcmdgo test testcmd
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go