api - 如何从 "test"包测试 Golang 中的主包?

标签 api unit-testing go

我有一个用 Golang 编写的简单程序。它是一个 API。所以在项目文件夹中,有一个名为 cmd 的文件夹,其中包含我的 main 包(用于初始化应用程序并定义 API 的端点)。还有一个以我的程序命名的文件夹,其中包含同样以我的程序命名的包中的多个文件。这个包作为执行所有必要查询的模型,并包含我定义的所有类型。

我还创建了一个名为 test 的文件夹。它包含名为 test 的包下的所有测试文件。问题是要运行测试,我必须访问我的主包!有没有办法在 Golang 中做到这一点?我尝试简单地使用 import "cmd/main" 但当然它不起作用。

我也有一个想法。也许我可以将所有初始化函数(在 cmd 文件夹中)移动到以我的程序命名的包中。这样我就可以在 test 中进行常规的 import。我在 cmd 中创建了 main.go 包中的 main.go 作为编译器的入口点。

我是 Go 的新手,所以我不是很自信。你认为这是正确的方法吗?

谢谢。

编辑:显然有些人认为这个问题是重复的,但事实并非如此。这是我对评论的解释:

I read this post before posting, but it didn't answer my question because in that post the person has his tests in the main package. The reason why I asked my question is because I don't want to have my tests in the main package. I'd rather have them all in a test folder inside the same package.

最佳答案

你想做的事在 GO 中是不可能的(假设你想测试私有(private)函数)。

because I don't want to have my tests in the main package. I'd rather have them all in a test folder inside the same package.

如果您将代码移动到不同的文件夹中,您的代码将属于不同的包。

这就是 GO 定义包的方式 https://golang.org/doc/code.html#Organization :

Each package consists of one or more Go source files in a single directory.

这是您的代码结构:

main
| -- main.go (package main)
+ -- test
     | -- main_test.go (package test)

将测试与代码保存在同一文件夹中是惯用的做法。如果语言或框架设置了一些开发人员必须遵循的规则,这很正常。 GO 对此非常严格。

这是组织代码的方式:

main
| -- main.go (package main)
| -- main_test.go (package main_test)
| -- main_private_test.go (package main)

通常根据其公共(public)接口(interface)测试代码是有意义的。做到这一点的最好方法是将测试放入不同的包中。 GO 惯例是将测试保存在同一文件夹中,这会导致使用相同的包名称。该问题有一个解决方法。您可以将 _test (package main_test) 前缀添加到测试包名称中。

如果无法使用公共(public)接口(interface)测试您的代码,您可以添加另一个包含测试的文件并在该文件中使用 package main

关于api - 如何从 "test"包测试 Golang 中的主包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53997114/

相关文章:

api - 如何使用 API (curl) 编辑 github 问题? (尤其是 : close)

c++ - C++ 中的单元测试客户端/服务器应用程序

c# - 从您打算测试的类继承是否总是次优的?

go - 一个 ticker 是否通过它的 ticker.C 告诉一个 goroutine 它被停止了?

golang 转换包含 unicode 的字节数组

go - PHP 相当于 GO 中的 strtotime()

api - 股票市场API

javascript - 使用 yourls api 获取短网址

javascript - api 回调的输出显示第一个对象的数据

sql-server - 如何对我的 SSIS 包进行单元测试和集成测试?