2017-06-21 82 views
1

我想知道如果使用go build ./...編譯二進制文件,將編譯到go二進制代碼中。這將編譯一個包含cli程序的二進制文件。對於這個cli程序,我有測試代碼和非測試代碼。我公司目前擁有的測試代碼幾種口味:在包將測試代碼僅引用在測試文件被編譯進二進制文件?

  • foo_test.gofoo_test
  • 在包foo_internal_test.gofoo
  • testutil.go封裝testutil提供測試實用功能

沒有測試代碼實際上引用在非測試代碼中。 testutil函數只能在測試文件中導入。

如果測試代碼被事實編譯到二進制文件中,那麼這個問題有多大?

+0

你指的是什麼二進制文件?如果你沒有構建測試二進制文件,那麼你不會編譯'* _test.go'文件,所以它們在鏈接過程中不會被排除,它們根本就不會被編譯。 – JimB

+0

我希望澄清問題 – snorberhuis

+0

'* _test.go'文件僅包含在命名包中的'go test'命令中。否則,它們甚至不會被編譯器所識別。 – JimB

回答

4

go二進制文件只包含可從其main()入口點訪問的代碼。對於測試二進制文件,main()是測試運行程序。

至於「多少問題」,它是如果它被包括......沒有。它會在一定程度上增加二進制大小和編譯時間,但不會產生影響 - 根據定義,沒有執行的代碼不會執行任何操作。

+0

有趣的邊緣情況是當使用幫助函數進行測試時。這些助手可以導入其他軟件包。當您只測試依賴關係時,它可能會對prod與測試代碼的大小產生顯着差異。我同意,Go應該消除所有死代碼。但是,如果明確表達這一點,而不是依靠魔法,那將會很好。 – mikijov

相關問題