Сбой теста при запуске с XCTool с logicTestBucketSize

У меня есть проект с более чем 1000 юнит-тестами, и я хотел ускорить сборку с помощью опции параллелизма xctool.

Таким образом, я включил это и установил logicTestBucketSize в 50. Тестовый запуск, но некоторые из них терпят неудачу, которые не терпят неудачу, когда не используется эта опция.

Мой вопрос: ведра работают независимо в своей песочнице или имеют глобальную переменную, которую может настроить модульный тест? что может объяснить некоторое перекрестное загрязнение между тестами

1 ответ

Решение

Да. При параллельном запуске тестов xctool будет запускать каждый блок тестов в одном процессе и одновременно запускать несколько блоков в разных процессах. Кроме того, вы можете выбрать, будет ли группирование выполняться для случая или класса с помощью -bucketBy class, Вы, вероятно, должны использовать класс, если у вас нет очень больших тестовых классов со многими тестовыми примерами.

Ваши тесты могут провалиться сейчас, хотя раньше этого не происходило, потому что:

  1. Тестовый пример опирается на глобальное состояние, заданное предыдущим тестовым примером, даже из другого класса теста, если он сгруппирован в один двоичный файл. Этот тест теперь не будет выполнен, так как порядок выполнения тестов может отличаться или не выполняться вообще.
  2. Тест изменяет глобальное состояние и вызывает сбой последующих тестов. Это, возможно, не было проблемой раньше, потому что этот тест был запущен после того, как другие тесты, которые могут быть затронуты, уже выполнялись.

Хороший способ справиться с первым типом сбоев - запустить с размером сегмента 1 (либо режимом по группам, либо режимом по отдельным случаям, в зависимости от того, какой режим вы будете использовать позже).

Другие вопросы по тегам