Как стать автором
Обновить

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

Время на прочтение2 мин
Количество просмотров3.7K
Автор оригинала: Muhammed Salih Guler
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.


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

Теги:
Хабы:
+2
Комментарии0

Публикации

Информация

Сайт
www.rshb.ru
Дата регистрации
Дата основания
Численность
свыше 10 000 человек
Местоположение
Россия
Представитель
Юлия Князева