# Выборочное тестирование {#selective-testing}

По мере роста вашего проекта увеличивается и количество тестов. В течение
долгого времени выполнение всех тестов при каждом PR или push на `main` занимало
десятки секунд. Но это решение не подходит для тысяч тестов, которые могут быть
у вашей команды.

При каждом запуске теста в CI вы, скорее всего, заново проводите все тесты,
независимо от изменений. Выборочное тестирование Tuist позволяет значительно
ускорить запуск самих тестов, выполняя только те тесты, которые изменились с
момента последнего успешного запуска теста на основе нашего алгоритма
<LocalizedLink href="/guides/features/projects/hashing">хэширования</LocalizedLink>.

Выборочное тестирование работает с командой `xcodebuild`, которая поддерживает
любой проект Xcode, а если вы генерируете свои проекты с помощью Tuist, вы
можете использовать команду `tuist test`, которая предоставляет некоторые
дополнительные удобства, такие как интеграция с
<LocalizedLink href="/guides/features/cache">бинарным кэшем</LocalizedLink>.
Чтобы приступить к выборочному тестированию, следуйте инструкциям в соответствии
с настройками вашего проекта:

- <LocalizedLink href="/guides/features/selective-testing/xcode-project">xcodebuild</LocalizedLink>
- <LocalizedLink href="/guides/features/selective-testing/generated-project">Сгенерированный проект</LocalizedLink>

> [!WARNING]
> **Module Vs File-level Granularity**
>
> Из-за невозможности выявления внутрикодовых зависимостей между тестами и
> исходными текстами максимальная детализация выборочного тестирования находится
> на уровне цели. Поэтому мы рекомендуем делать цели небольшими и
> сфокусированными, чтобы максимизировать преимущества выборочного тестирования.


> [!WARNING]
> **Test Coverage**
>
> Инструменты для покрытия тестов предполагают, что весь набор тестов запускается
> сразу, что делает их несовместимыми с выборочным прогоном тестов - это означает,
> что данные о покрытии могут не отражать реальность при использовании выбора
> тестов. Это известное ограничение, и оно не означает, что вы делаете что-то
> неправильно. Мы призываем команды задуматься о том, приносит ли покрытие
> значимую информацию в этом контексте, и если да, то будьте уверены, что мы уже
> думаем о том, как сделать так, чтобы покрытие правильно работало с выборочными
> прогонами в будущем.


## Комментарии к запросам на перетяжку/слияние {#pullmerge-request-comments}

> [!WARNING]
> **Integration With Git Platform Required**
>
> Чтобы получить автоматические комментарии к запросам pull/merge, интегрируйте
> ваш
> <LocalizedLink href="/guides/server/accounts-and-projects">Tuist-проект</LocalizedLink>
> с
> <LocalizedLink href="/guides/server/authentication">Git-платформой</LocalizedLink>.


Как только ваш проект Tuist будет связан с вашей Git-платформой, например
[GitHub](https://github.com), и вы начнете использовать `tuist xcodebuild test`
или `tuist test` в качестве части вашего CI wortkflow, Tuist будет публиковать
комментарий непосредственно в ваших запросах pull/merge, включая, какие тесты
были выполнены, а какие пропущены: ![Комментарий приложения GitHub со ссылкой на
Tuist Preview](/images/guides/features/selective-testing/github-app-comment.png)
