TGViewer
AppFiles - Mobile Development AppFiles - Mobile Development @applib · 2.17K subscribers
Post #4443 301
Mugshot - скриншот-тесты на основе превью Compose

Вы, вероятно, уже создали @Preview для большинства своих экранов. Mugshot — это библиотека для тестирования на основе скриншотов, которая превращает каждый такой превью-экран в тест: достаточно добавить аннотацию @Mugshot и один раз записать эталонное изображение (golden image), после чего сборка будет падать при любом изменении экрана. Рендеринг экранов происходит в JVM с использованием layoutlib — того же движка, который обеспечивает работу превью в Android Studio, — поэтому тесты выполняются как обычные unit-тесты на любой машине, способной собрать ваше приложение.

Почему стоит Mugshot:

• Не нужно писать отдельные классы тестов или поддерживать актуальность списка экранов. Процессор KSP находит все превью с аннотацией и генерирует тесты автоматически: добавление превью приводит к созданию скриншота, а удаление — к его исчезновению.
• Библиотека работает в модулях Kotlin Multiplatform. Превью в commonMain подхватываются так же, как и любые другие, а ресурсы Compose Multiplatform (включая stringResource) корректно отображаются на эталонных изображениях.
• Это быстро. В приложении из 30 модулей с 7176 скриншотами Mugshot выполнил проверку за 58 секунд. Paparazzi потребовалось 89 секунд, а решение Google (Compose Preview Screenshot Testing) завершилось с ошибкой нехватки памяти при стандартных настройках. Подробности и репозиторий для самостоятельного запуска теста доступны в бенчмарке.
• Библиотека не создает проблем при настройке Gradle. Тесты со скриншотами выполняются в отдельной задаче и отдельном процессе JVM, поэтому они не конфликтуют с Robolectric, а плагин Gradle поддерживает кэширование конфигурации.

Mugshot на GitHub: https://github.com/TRazDev/Mugshot
Платформа: Android
⭐️: 305

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
More from @applib
  1. Oct 7, 2026Pitch Kit - настройка гитары и распознавание аккордов Современная и удобная в использовани…
  2. Oct 6, 2026Визуализация данных с помощью шестиугольной тепловой карты в Swift Charts При создании гра…
  3. Oct 6, 2026Правда о Coil в Jetpack Compose: измеряем реальный оверхед SubcomposeAsyncImage Взял пять…
  4. Oct 6, 2026Rich Push Notifications в iOS: Notification Service Extension, Notification Content Extens…
  5. Oct 6, 2026SweetPad - xcodebuild для людей и агентов Инструмент командной строки, который собирает, з…
  6. Oct 5, 2026Как бы я спроектировал iOS-приложение с нуля, если бы оно должно было прожить 10 лет Тест,…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →