是否将测试库合并到最终版本中

Dmy*_*nko -2 testing unit-testing go go-modules

我想知道是否仅将用于测试的库包含在最终的构建发行版中。我在go.mod/ go.sum文件中看到了依赖项,但无法检查最终的二进制文件。

我猜想Go构建工具可以某种方式处理冗余代码,但是我没有找到任何证据。

有人可以指出我在文档中的位置还是描述行为?

icz*_*cza 7

官方文档:命令执行:编译软件包和依赖项:

编译软件包时,build会忽略以'_test.go'结尾的文件。

也来自的doc文件testing

要编写新的测试套件,请创建一个名称以_test.go结尾的文件,该文件包含此处所述的TestXxx函数。将文件与要测试的文件放在同一软件包中。该文件将从常规软件包生成中排除,但在运行“ go test”命令时将包括在内。

构建您的应用程序甚至不会碰到测试文件。因此,不,仅从测试引用的依赖项不包括在可执行二进制文件中。

还很难测试吗?编写一个简单的应用程序,进行构建。注意编译后的二进制文件的大小。

添加一个测试文件,参考一些lib。再次构建,大小不会改变。现在,如果您从应用程序中引用该程序包并再次进行构建,它将不断增长。

例:

package main

func main() {
    println("Hello world")
}
Run Code Online (Sandbox Code Playgroud)

基于linux(Go 1.13)构建,大小为:1,148,861 bytes

添加测试:

package main

import (
    "fmt"
    "testing"
    "time"
)

func TestOne(t *testing.T) {
    fmt.Println(time.Now())
}
Run Code Online (Sandbox Code Playgroud)

大小不变。现在,将此TestOne()功能(以及所需的导入)添加到主应用程序:大小增加到2,165,259 bytes

  • 一个更简单的测试是在测试中导入不存在的库,然后看着标准构建成功。 (2认同)