Получаем реальное покрытие тестами для приложений на Flutter

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!

https://unsplash.com/photos/dQf7RZhMOJU
https://unsplash.com/photos/dQf7RZhMOJU

Покрытие приложения тестами - один из самых важных принципов в разработке. У тестов есть множество безусловных достоинств: они помогают избежать багов, регрессии и экономят много денег.

Во Flutter есть несколько видов написания тестов:

  • Unit-тесты

  • Widget-тесты

  • Integration-тесты

Как порядочный разработчик, Flutter приложения вы будете писать вместе с тестами.

Запуск тестов

Во Flutter есть встроенная команда для запуска и отображения состояния тестирования. Выглядит она так:

Эта команда запустит тесты и создаст файл с результатами по пути coverage/lcov.info. Обратите внимание, что отчеты о покрытии могут отсутствовать. Команда будет вычислять только те тесты, которых достигнет. Если файл недоступен для точки входа, выполняющей покрытие, то VM(виртуальная машина) никогда его не увидит и, следовательно, не вернет никакой информации о покрытии.

Тестирование неохваченных файлов

На Github есть открытая тема по этому вопросу, но официального решения пока что нет. К счастью, некоторые члены сообщества придумали обход этой проблемы.

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

По-хорошему, вы не должны добавлять все эти зависимости вручную! Давайте напишем скрипт, который будет добавлять все необходимые файлы.

С помощью команды выше вы создаете файл coverage_helper_test.dart в папке test. В него будут добавляться все необходимые импорты.

Этот скрипт просто проходится по всем файлам в папке lib, определяя путь до них с приставкой package: и добавляя их как импорты.

Здесь нужно отметить, вероятно вы не хотели бы, чтобы сгенерированные файлы были частью расчетов, т.к вы их не писали сами. Поэтому путь не добавляется, если файл сгенерирован библиотекой.

Теперь у вас есть список файлов, которые будут учтены в покрытии кода тестами (coverage).

Обновление результатов lcov

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

Как уже отмечалось, скорее всего, вы не хотите, чтобы сгенерированные файлы были отображены в результатах тестов, так как эти файлы вы не пишите. Вы можете убрать их из файла lcov.info.

Для этого можно использовать библиотеку lcov.

Теперь lcov.info готов к дальнейшему использованию, а если точнее, то к генерации процента.

Загружаем результаты на Codecov с помощью Github Actions

Codecov - один из самых известных сайтов по покрытию кода. Множество библиотек, такие как Bloc, используют его чтобы показать покрытие кода и его распределение.

Этот сайт бесплатный для проектов с открытым исходным кодом. Так что, если вы разработчик OSS, это отличный вариант для вас.

Для начала, создайте файл gather_files.sh в папке test.

Подготовьте ваш файл Github Actions и убедитесь, что добавили туда следующее:

Все что нужно сделать, это загрузить файл lcov, созданный ранее, в Codecov Action.

Как только процесс завершится, проект на Codecov обновится и выдаст отчет.

Напоследок, убедитесь, что вы добавляете и удаляете файл coverage_helper_test до и после Github Action. Вам не стоит добавлять сгенерированные файлы в VCS.


Теперь после такой реализации вы сможете получать полное покрытие для ваших проектов. Идите вперед и пишите невероятные тесты сейчас!

Источник: https://habr.com/ru/company/rshb/blog/561554/


Интересные статьи

Интересные статьи

Эта статья рассказывает про удивительные приключения JS-разработчиков в мире ОС Tizen. В ней будет и пошаговая настройка рабочего окружения, и подключение «умного» телеви...
Поздравляю, по крайней мере, всех живущих в Сибири с наступлением лета!)))Сегодня довольно непростая тема - навигация.Мы рассмотрим как устроена навигация в Flutter, что ...
Развернуть в Kubernetes приложение в минимально рабочей конфигурации нетрудно. Но когда вы захотите обеспечить своему приложению максимальную доступность и надежность в р...
Моя предыдущая статья Разборщик (Parsing Complex) JSON (JavaScript Object Notation) во Flutter получила много хороших отзывов от людей, которые начинают работать во Flutt...
Вопрос о том надо ли проверять то, что возвращает malloc является спорным и всегда порождает жаркие дискуссии. Часть людей считает, что надо пытаться обрабатывать все виды runtime ош...