使用相同的程序包会污染已编译的二进制文件吗?

时间:2019-01-17 18:45:08

标签: go testing

TL; DR:

在包中编写的测试最终会最终导出到包中吗?它们会在已编译的二进制文件中添加任何垃圾或重量吗?

长版:

假设我有一个foo Go包:

pkg/
  foo/
    bar.go
    bar_test.go

我知道black box vs white box测试方法。简短回顾一下,我可以:

  1. 具有bar_test.go个声明foo_test的程序包,或
  2. 将其包含在主要foo软件包中。

方法1提供了更好的隔离性,因为它可以专注于包的公共API,因为仅访问foo的导出标识符。同样,当应用程序代码使用foo导入import "pkg/foo"包时,仅编译包含主foo包的文件。真好。 [1]

但是,在某些情况下,将测试放入foo是一种方便的折衷方案。我本人并不特别喜欢它,但是我可以在几个代码库中看到它,并且我理解为什么有时有必要。

我的问题是关于这些测试会发生什么。由于它们是软件包foo的一部分,因此,当foo导入到某处时,我希望可以进行测试。还是编译器足够聪明以剥离它们?


[1]这不是什么方法更好的问题。没关系。请放弃对“该方法还更好”的评论。

1 个答案:

答案 0 :(得分:3)

是的,Go工具足够聪明,不会将它们传递给编译器。

https://github.com/golang/go/issues/10184