2020-03-18 15:35:54 +00:00
|
|
|
|
# tparallel
|
|
|
|
|
|
|
|
|
|
Реализуйте api, дублирующее поведение `t.Parallel()`.
|
|
|
|
|
|
|
|
|
|
Тест - это функция с сигнатурой `func(*T)`. Вам нужно реализовать функцию `Run(topTests []func(*T))`,
|
|
|
|
|
запускающую множество top-level тестов.
|
|
|
|
|
|
2022-03-12 23:59:22 +00:00
|
|
|
|
Каждый тест получает аргументом уникальный объект `*T`, по объекту `T` на каждый запуск теста.
|
2020-03-18 15:35:54 +00:00
|
|
|
|
|
2020-03-19 23:50:25 +00:00
|
|
|
|
В начале все тесты выполняются последовательно. Если тест вызывает `t.Parallel()`, то он становится
|
|
|
|
|
параллельным и блокируется на этом вызове. После этого, запускается следующий последовательный тест.
|
2020-03-18 15:35:54 +00:00
|
|
|
|
|
2020-03-19 23:50:25 +00:00
|
|
|
|
Когда все последовательные тесты завершились, все параллельные тесты разблокируются и продолжают своё
|
2020-03-19 18:01:07 +00:00
|
|
|
|
исполнение.
|
2020-03-18 15:35:54 +00:00
|
|
|
|
|
|
|
|
|
Функция `Run` выходит, когда завершились все тесты.
|
|
|
|
|
|
2020-03-19 22:56:52 +00:00
|
|
|
|
Тест может запускать под-тесты вызывая `t.Run`. Тест считается завершённым, когда завершилась его тестовая функция и
|
2020-03-18 15:35:54 +00:00
|
|
|
|
завершились все его подтесты.
|
|
|
|
|
|
2020-03-19 18:01:07 +00:00
|
|
|
|
Под-тест начинает своё выполнение последовательно, блокируя вызов Run. Подтест может стать параллельным,
|
2020-03-18 15:35:54 +00:00
|
|
|
|
вызвав `t.Parallel()`. Такой тест должен продолжить исполнение, после того как функция родительского теста
|
|
|
|
|
завершилась.
|