TL; DR:
Тест, написанный в пакете, попадает в окончательный экспортированный пакет? Они добавляют какой-нибудь мусор или вес в скомпилированный бинарный файл?
Более длинная версия:
Допустим, у меня есть пакет foo
Go:
pkg/
foo/
bar.go
bar_test.go
Я знаю о черном ящике против белого ящика подходов к тестированию на ходу Коротко говоря, я могу:
- должен
bar_test.go
объявить пакет foo_test
или
- есть часть основного
foo
пакета.
Подход 1 обеспечивает лучшую изоляцию, поскольку позволяет сосредоточиться на общедоступном API пакета, так как доступ осуществляется только к экспортированным идентификаторам foo
. Кроме того, когда код приложения импортирует пакет foo
с import "pkg/foo"
, компилируются только файлы, содержащие основной пакет foo
. Это мило. [1]
Однако бывают случаи, когда введение тестов в foo
является удобным компромиссом. Мне самому это не особо нравится, но я вижу это в нескольких кодах и понимаю, почему иногда это необходимо.
Мой вопрос о том, что происходит с этими тестами. Поскольку они являются частью пакета foo
, когда foo
куда-то импортируется, я ожидаю, что тесты будут приняты. Или компилятор достаточно умен, чтобы их убрать?
[1] вопрос не в том, какой подход «лучше». Это не имеет большого значения. Пожалуйста, воздержитесь от комментариев "этот подход не лучше".