unit-testing - 使用 Go 语言进行测试的正确包命名

标签 unit-testing go

我在 Go 中看到了几种不同的测试包命名策略,想知道每种方法的优缺点以及我应该使用哪一种。

策略 1:

文件名:github.com/user/myfunc.go

package myfunc

测试文件名:github.com/user/myfunc_test.go

package myfunc

bzip2举个例子。

策略 2:

文件名:github.com/user/myfunc.go

package myfunc

测试文件名:github.com/user/myfunc_test.go

package myfunc_test

import (
    "github.com/user/myfunc"
)

wire举个例子。

策略 3:

文件名:github.com/user/myfunc.go

package myfunc

测试文件名:github.com/user/myfunc_test.go

package myfunc_test

import (
    . "myfunc"
)

strings举个例子。

Go 标准库似乎混合使用了策略 1 和 2。我应该使用这三个中的哪一个?将 package *_test 附加到我的测试包中很痛苦,因为这意味着我无法测试我的包私有(private)方法,但也许有一个我不知道的隐藏优势?

最佳答案

您列出的三种策略之间的根本区别在于测试代码是否与被测代码在同一个包中。在测试文件中使用 package myfuncpackage myfunc_test 的决定取决于您是否要执行 white-boxblack-box测试。

在项目中同时使用这两种方法并没有错。例如,您可以有 myfunc_whitebox_test.gomyfunx_blackbox_test.go

测试代码包比较

  • 黑盒测试:使用package myfunc_test,这将确保您只使用exported identifiers .
  • 白盒测试:使用 package myfunc 以便您可以访问未导出的标识符。适用于需要访问非导出变量、函数和方法的单元测试。

问题中列出的策略比较

  • 策略 1: myfunc_test.go 文件使用 package myfunc — 在这种情况下,myfunc_test.go< 中的测试代码 将与 myfunc.go 中正在测试的代码在同一个包中,在本例中为 myfunc
  • 策略 2: 文件 myfunc_test.go 使用 package myfunc_test — 在本例中是 myfunc_test.go< 中的测试代码 "将被编译为一个单独的包,然后与主测试二进制文件链接并运行。"[来源:test.go 中的第 58-59 行源代码]
  • 策略 3: myfunc_test.go 文件使用 package myfunc_test 但使用点符号导入 myfunc —这是策略 2 的变体,但使用点符号来导入 myfunc

关于unit-testing - 使用 Go 语言进行测试的正确包命名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19998250/

相关文章:

android - Android 单元测试的正确方法

unit-testing - 我怎么知道某事是集成测试还是单元测试

logging - 是否可以在不丢失行号前缀的情况下包装 log.Logger 函数?

go - 如何在golang中体现struct recursive

go - 无法在 GoLand 控制台中显示整条长线

Python:模拟文件以进行单元测试

java - 用于 Stax 解析器的 Junit

.net - 如何填充 ObjectSet (EntityFramework)?

go - 在每个 BookName 之后在 booksName 数组中添加分号,如何将最后一个分号更改为 (And)

http - 客户端关闭连接时,转到http.ResponseWriter.Write不返回错误