Как написать тест в Go, использующий флаг -short и можно ли его объединить с флагом -benchmark? - PullRequest
0 голосов
/ 15 марта 2019

Как использовать флаг -short, указанный в go test -short?

Можно ли объединить флаги -short и -benchmark?

Я довольно новичок в языке Go, но я пытаюсь приспособиться к некоторым из его общих практик.Часть этого состоит в том, чтобы убедиться, что в моем коде не только добавлены юнит-тесты таким образом, что система go test работает, но что go test -benchmark также функционирует полезным образом.

На данный момент у меня естьэталонный тест, который включает в себя серию суб-тестов, основанных на различном размере входных данных.Выполнение 15 перестановок занимает много времени, поэтому было бы неплохо дать возможность сократить это время тестирования.

Следующий набор тестов, которые я планирую написать, может включать ряд примеров ввода данных.Я ожидаю, что запуск одного из них может сработать как проверка работоспособности для короткого теста, но было бы неплохо иметь возможность запустить несколько на более длинных (или нормальных) тестовых прогонах.

Когда я смотрю на документацию GoLang для флагов тестирования , там написано "Скажите долгосрочным тестам сократить их время выполнения".это звучит как то, что я хочу, но я не могу понять, как подобрать этот флаг в тестовом коде.

1 Ответ

1 голос
/ 19 марта 2019

Как использовать флаг -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/ документов.Часто самая полезная документация находится в документации пакета.

...