如何在 Golang 测试文件中构建导入

我在 中定义了main.go无法在main_test.go. 但是,在一些在线教程中,我看到函数是可访问的:我想了解其中的区别,以及如何以惯用的方式构建这些函数。


具体来说,我有一个包含多个二进制文件的应用程序:


myapp/cmd/app/main.go

myapp/cmd/cli/main.go

func main我目前在文件中运行了很多简单的单元测试逻辑main.go。我只是在测试单个函数并让它们打印输出,如果我能避免的话,我不会试图调用“测试”套件的全部功能。


由于此时我在 main.go 顶部的测试太长了,我想将它们移动到特定的测试文件中,例如:


myapp/cmd/app/main_test.go

myapp/cmd/cli/main_test.go

这适用于我的 makefile:


# Makefile


all: test build

build:

    go build -o cmd/app/main cmd/app/main.go

    go build -o cmd/cli/main cmd/cli/main.go

test:

    go test ./cmd/app/main_test.go

    go test ./cmd/cli/main_test.go

如果我只想运行我的测试文件,我想把这个项目放在我的app/main.go


// cmd/app/main.go

package main


func definedInMain(m string) string {

  // 

}


func main() {

  m := definedInMain("1")

  fmt.Println(m)

  // all the rest of my app's logic...

}

并在我的main_test.go


// cmd/app/main_test.go


package main


// no imports, I hope?


func testDefinedInMain() {

  m := definedInMain("1")

  fmt.Println(m)  

}

但是,这失败了:


undefined: definedInMain

FAIL

我很困惑,我必须将所有这些功能导入到我的main_test.go文件中(即使我尝试,它也会建议"can't load package: ... myapp/cmd/app/main" in any of: ...")


有没有一种干净、惯用的方法可以让我在测试文件中测试我非常简单的单元测试并在主文件中运行我的函数,而无需大量重写导入或其他大量的重新架构?


从某些链接中,我的印象是,如果我创建一个main_test.go,导入将自行进行(就像在这些示例中一样)。


https://medium.com/@thejasbabu/testing-in-golang-c378b351002d (其中反向函数未明确导入 reverse_test.go)

https://tutorialedge.net/golang/intro-testing-in-go/ (其中 Calculate 函数未显式导入 main_test.go)

https://blog.alexellis.io/golang-writing-unit-tests/ (其中 Sum 函数未在 main_test.go 中显式导入)

所以,你可以看到我有点困惑教程免费导入它们的功能,而我没有,我只是想更好地理解魔法。


是不是我的函数 definedInMain 是私有的,因为它是小写的?我确实希望这个函数是私有的,但我希望它能以与在 main.go 中可用的方式相同的方式导出到 main_test.go 文件。我是否必须完全公开才能在另一个文件中进行测试?这似乎不正确,例如,“只能在 go 中对公共方法进行单元测试吗?”


拉莫斯之舞
浏览 76回答 0
0回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go