Как использовать флаг -short, указанный в go test -short?
Использование короткого флага в командной строке приводит к возврату функции testing.Short()
true
.Вы можете использовать это либо для добавления тестовых случаев, либо для их пропуска:
if testing.Short() == false {
// Extra test code here
}
Выше приведено несколько необычное, это может быть более распространенным, чтобы увидеть:
func TestThatIsLong(t *testing.T) {
if testing.Short() {
t.Skip()
}
}
ОбязательноУ вас должно быть достаточно тестов для выполнения -short
, чтобы выполнить хотя бы минимальную проверку.Некоторые люди предлагают использовать прогон -short
для основной непрерывной интеграции и проверок перед фиксацией, сохраняя при этом более длинные прогоны теста для запланированных ежедневных или еженедельных сборок или слияний.
В разделе Документы сайта The Go Programming Language упоминается, как кратко написать тестовый код, но основная часть информации по этой теме содержится в Документация пакета для пакета Go Testing .Для большинства тем большая часть документации будет находиться в пакете, а не отдельно.Это может сильно отличаться от других языков, где документы класса и пакета часто плохие.
Возможно ли объединить флаги -short и -benchmark?
Это возможно, поскольку testing.Short()
является глобальным по объему.Тем не менее, рекомендуется, чтобы в тестах Benchmark не использовался флаг -short
для контроля их поведения.Лицо, проводящее бенчмаркинг, чаще всего меняет -benchtime
, разрешенное для каждого теста.
По умолчанию время ожидания установлено на одну секунду.Если у вас есть 60 тестовых примеров, для завершения выполнения потребуется не менее шестидесяти секунд (время установки + время выполнения).Если для рабочего времени задано меньшее значение:
go test -benchmem -benchtime 0.5s -bench=. <package_names>
, общее время выполнения будет уменьшаться пропорционально.
Различные тестовые блоки описаны в разделе в документации по команде команды go (не в документации к пакету, в которой не указано время выполнения).Вам не нужно делать что-то другое в своем коде теста, чтобы время тестирования было эффективным, просто используйте стандарт for i := 0; i < b.N; i++ {
, и среда будет корректировать значение N по мере необходимости.
Хотя это не рекомендуется,Я использовал -short
в бенчмарке для уменьшения количества тестовых случаев при изменении входных данных для функции, чтобы дать представление о ее Big O нотации .Для всех тестов (-короткий и обычный) я сохраняю представительный размер данных для ввода, чтобы отслеживать долгосрочные тренды.Для более длительных запусков я включаю несколько небольших и больших размеров наборов данных, чтобы позволить приблизить требования ресурсов функций.Как и в случае с модульными тестами, я выбираю запускать -short версию всегда в CI, а более длинную версию - по расписанию.
Независимо от ваших вопросов о Go, настоятельно рекомендуется тщательно попробоватьчтение и https://golang.org/doc/ и соответствующих https://golang.org/pkg/ документов.Часто самая полезная документация находится в документации пакета.