Влияет ли использование одного и того же пакета на скомпилированный двоичный файл? - PullRequest
0 голосов
/ 17 января 2019

TL; DR:

Тест, написанный в пакете, попадает в окончательный экспортированный пакет? Они добавляют какой-нибудь мусор или вес в скомпилированный бинарный файл?

Более длинная версия:

Допустим, у меня есть пакет foo Go:

pkg/
  foo/
    bar.go
    bar_test.go

Я знаю о черном ящике против белого ящика подходов к тестированию на ходу Коротко говоря, я могу:

  1. должен bar_test.go объявить пакет foo_test или
  2. есть часть основного foo пакета.

Подход 1 обеспечивает лучшую изоляцию, поскольку позволяет сосредоточиться на общедоступном API пакета, так как доступ осуществляется только к экспортированным идентификаторам foo. Кроме того, когда код приложения импортирует пакет foo с import "pkg/foo", компилируются только файлы, содержащие основной пакет foo. Это мило. [1]

Однако бывают случаи, когда введение тестов в foo является удобным компромиссом. Мне самому это не особо нравится, но я вижу это в нескольких кодах и понимаю, почему иногда это необходимо.

Мой вопрос о том, что происходит с этими тестами. Поскольку они являются частью пакета foo, когда foo куда-то импортируется, я ожидаю, что тесты будут приняты. Или компилятор достаточно умен, чтобы их убрать?


[1] вопрос не в том, какой подход «лучше». Это не имеет большого значения. Пожалуйста, воздержитесь от комментариев "этот подход не лучше".

1 Ответ

0 голосов
/ 17 января 2019

Да, инструмент Go достаточно умен, чтобы не передавать их компилятору.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...