Тестирование
SwiftPM интегрирован с XCTest, фреймворком Apple для модульного тестирования. Запуск swift test из терминала или запуск действия тестирования в вашей IDE (Xcode или аналогичной) выполнит все ваши тестовые случаи XCTest. Результаты тестирования будут отображены в вашей IDE или выведены в терминал.
Удобный способ тестирования на Linux — использование Docker. Например:
$ docker run -v "$PWD:/code" -w /code swift:latest swift test
Вышеприведенная команда запустит тесты с использованием последнего образа Swift Docker, используя bind-монтирование для источников на вашей файловой системе.
Swift поддерживает архитектурно-специфичный код. По умолчанию, импорты Foundation содержат архитектурно-специфичные библиотеки, такие как Darwin или Glibc. При разработке на macOS вы можете использовать API, которые недоступны на Linux. Поскольку вы, скорее всего, будете развертывать облачную службу на Linux, важно тестировать на Linux.
Важным историческим аспектом тестирования на Linux является файл Tests/LinuxMain.swift.
- В версиях Swift 5.4 и новее тесты автоматически обнаруживаются на всех платформах, никакой специальный файл или флаг не требуется.
- В версиях Swift >= 5.1 < 5.4 тесты могут быть автоматически обнаружены на Linux с использованием флага
swift test --enable-test-discovery. - В версиях Swift, более старых чем 5.1, файл
Tests/LinuxMain.swiftпредоставляет SwiftPM индекс всех тестов, которые необходимо выполнить на Linux, и важно поддерживать актуальность этого файла по мере добавления новых модульных тестов. Чтобы перегенерировать этот файл, выполните командуswift test --generate-linuxmainпосле добавления тестов. Также рекомендуется включить эту команду в настройку непрерывной интеграции.
Тестирование для производства
-
Для версий Swift между 5.1 и 5.4 всегда тестируйте с помощью
--enable-test-discovery, чтобы избежать забытых тестов на Linux. - Используйте санитайзеры. Перед запуском кода в производстве, и предпочтительно как регулярную часть вашего процесса CI, выполните следующие действия:
- Запустите набор тестов с TSan (санитайзер потоков):
swift test --sanitize=thread - Запустите набор тестов с ASan (санитайзер адресов):
swift test --sanitize=addressиswift test --sanitize=address -c release -Xswiftc -enable-testing
- Запустите набор тестов с TSan (санитайзер потоков):
- В общем случае, во время тестирования, вы можете скомпилировать с помощью
swift build --sanitize=thread. Бинарник будет работать медленнее и не подходит для производства, но вы сможете выявить проблемы с потоками на ранней стадии — до развертывания вашего ПО. Часто проблемы с потоками очень сложно отлаживать и воспроизводить, а также вызывают случайные проблемы. TSan помогает обнаружить их на ранней стадии.
The Swift Programming Language, Copyright © 2014-2025 Apple Inc.
Swift and the Swift logo are trademarks of Apple Inc.
Documentation for Swift 6.0.3
https://www.swift.org/documentation/server/guides/testing.html