Сбой теста при запуске с XCTool с logicTestBucketSize
У меня есть проект с более чем 1000 юнит-тестами, и я хотел ускорить сборку с помощью опции параллелизма xctool.
Таким образом, я включил это и установил logicTestBucketSize в 50. Тестовый запуск, но некоторые из них терпят неудачу, которые не терпят неудачу, когда не используется эта опция.
Мой вопрос: ведра работают независимо в своей песочнице или имеют глобальную переменную, которую может настроить модульный тест? что может объяснить некоторое перекрестное загрязнение между тестами
1 ответ
Да. При параллельном запуске тестов xctool будет запускать каждый блок тестов в одном процессе и одновременно запускать несколько блоков в разных процессах. Кроме того, вы можете выбрать, будет ли группирование выполняться для случая или класса с помощью -bucketBy class
, Вы, вероятно, должны использовать класс, если у вас нет очень больших тестовых классов со многими тестовыми примерами.
Ваши тесты могут провалиться сейчас, хотя раньше этого не происходило, потому что:
- Тестовый пример опирается на глобальное состояние, заданное предыдущим тестовым примером, даже из другого класса теста, если он сгруппирован в один двоичный файл. Этот тест теперь не будет выполнен, так как порядок выполнения тестов может отличаться или не выполняться вообще.
- Тест изменяет глобальное состояние и вызывает сбой последующих тестов. Это, возможно, не было проблемой раньше, потому что этот тест был запущен после того, как другие тесты, которые могут быть затронуты, уже выполнялись.
Хороший способ справиться с первым типом сбоев - запустить с размером сегмента 1 (либо режимом по группам, либо режимом по отдельным случаям, в зависимости от того, какой режим вы будете использовать позже).