testing - 使用测试包在 golang 中导入周期

标签 testing go

我正在尝试重构一些测试代码,并且在两个包中我需要做同样的事情(连接到数据库)。我正在获取一个导入周期。我明白为什么我不能这样做,但我想知道最好的解决方法是什么。

一些细节,我有三个包:testutilsclientengine

在引擎中,我定义了一个接口(interface)和实现(均已导出)。

package engine
type interface QueryEngine {
  // ...
}
type struct MagicEngine {
  // ...
}

然后在 testutils 包中我将创建一个 MagicEngine 并尝试返回它。

package testutils
func CreateAndConnect() (*engine.MagicEngine, error) {
  // ....
}

现在在测试代码中(使用 TestMain)我需要做类似的事情

package engine
func TestMain(m *testing.M) {
  e, err := testutils.CreateAndConnect()
  // ....
  os.Exit(m.Run())
}

这当然是一个循环。我想这样做,以便我可以在 client 包中也使用此 testutils.CreateAndConnect() 方法。我不想在两个包中重复代码。我不希望它出现在 engine 包的主要代码中,它对测试非常具体。

我尝试将它作为导出方法添加到 engine 测试类 (engine/engine_test.go) 并在 client/client_test.go 中使用它。没有骰子。 :/

我觉得我已经用其他语言做到了,但可能很疯狂。构建此代码以实现可重用性的最佳方式是什么?

最佳答案

您可以使用黑盒样式测试,因为引擎的组件是导出的。将您的测试更改为在包 engine_test 中:

package engine_test
import "engine"
import "testutils"
func TestMain(m *testing.M) {
  e, err := testutils.CreateAndConnect()
  // ....
  os.Exit(m.Run())
}

关于testing - 使用测试包在 golang 中导入周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39028261/

相关文章:

javascript - 测试( Mocha 、 Chai )上下文中的 "chainable"是什么意思?

python - 将函数用于模拟类的方法返回值

python - 重写 MS 堆栈 : jQuery/C#/SQL Server

unit-testing - 导出 Golang 包进行测试?

json - 如何在 Golang 中解析嵌套 JSON 对象中的嵌套数组?

tcp - Go:有效处理通过 TCP 接收的碎片数据

linux - 从 Bash 中的目录获取文件名

python - 测试文件中的每一行

go - 我使用 pprof 的 golang 程序分析显示内存在 std/json 包中的 json (* decodeState) objectInterface 处增加

performance - Jmeter - Android 移动应用程序录制