Зачем? Отображение классов в покрытии модульных тестов, хотя и не добавлено в контрольные цели - PullRequest
0 голосов
/ 17 апреля 2019

У меня есть несколько классов UIView, на которые распространяется покрытие, хотя.Я не добавил их под цель тестирования модуля.Ни в модульном тесте, ни в пользовательском интерфейсе.но все еще те файлы, показывающие.

Я не знаю, включены ли они в тестовое покрытие.

В: Как мы можем удалить их из покрытия модульных тестов?В: Включены ли они в оценку покрытия модульного теста?

Класс, включенный в покрытие покрытия модульного теста:

enter image description here

Классы, не добавленные в тестцели:

enter image description here

Ответы [ 5 ]

1 голос
/ 17 апреля 2019

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

Я рекомендую вам использовать XCOV: https://github.com/nakiostudio/xcov

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

1 голос
/ 17 апреля 2019

Привет @ Сэнди , чтобы ответить на ваши вопросы:

Как мы можем удалить их из покрытия модульных тестов?

Начиная с Xcode 10.2, нет возможности исключать файлы из отчета об охвате тестами.

Включены ли они в оценку покрытия модульных тестов?

Да, они есть.Все файлы вносят вклад в общее покрытие%.

Если вы хотите вычислить тестовый показатель покрытия, который не учитывает определенные файлы, ваш лучший шанс - написать скрипт для разбора xccov output.

Я не могу найти официальной документации о том, как с ним взаимодействовать, но этот пост - хорошее место для начала.

1 голос
/ 17 апреля 2019

Я думаю, что ваша проблема связана с охватом кода сбора для всех целей.

  1. создать новую цель - Вы можете дублировать существующую.

enter image description here

  1. Изменить Хост-приложение на новую цель.

enter image description here

  1. Измените настройки вашей тестовой схемы на новую цель в качестве источника покрытия кода. Пожалуйста, посмотрите на скриншоты:

Manage Schemes

Edit

Choose Gather coverage for...

enter image description here

enter image description here

  1. Не забудьте добавить в свой тестовый файл @testable import UnitTestExampleCodeCoverage
  2. Добавить в новые целевые файлы, которые вы хотите. В моем примере proj у меня есть: AppDelegate, ViewController, ViewController2, ViewController3, ViewController4, View, View2, View3, View4. Я добавил к новой цели: AppDelegate, ViewController3, ViewController4, View3, View4, поэтому только эти пять классов должны быть базовыми для расчета покрытия кода.

  3. Добавьте тесты к своим классам.

  4. Отчет о покрытии кода содержит только классы, добавленные к новой цели . Пожалуйста, помните, что старая цель может быть вашей главной целью - новая - только своего рода абстрактный слой для достижения вашей цели: «удалить некоторые классы из отчета о покрытии кода».

enter image description here

Вот весь проект: https://github.com/mStaruchowicz/SO55723759

Счастливого тестирования;)

0 голосов
/ 18 апреля 2019

Когда выполняются юнит-тесты,

  • Ваше приложение запущено
  • Тесты вводятся и запускаются

Проблема в том, что запуск приложения запускает вашу обычную последовательность, создавая представления и, возможно, инициируя некоторые сетевые вызовы. Это не только мешает составлению отчетов о покрытии кода - оно потенциально отравляет ваши юнит-тесты. Например, если вы тестируете уведомления с помощью модульного теста, запускающего уведомление, вы должны знать, что только объекты, прослушивающие это уведомление, были созданы тестом, а не лежали без запуска приложения.

Еще одна проблема с игнорированием покрытия определенных файлов: как вы узнаете, каков охват ваших юнит-тестов этих файлов?

Решение - использовать для тестирования другой делегат приложения, который почти ничего не делает. Подробнее см. Как переключить делегат приложения iOS для улучшенного тестирования

0 голосов
/ 17 апреля 2019

Если вам нужен настраиваемый отчет о покрытии UT, в котором вы можете игнорировать нужные файлы, Slather может быть лучшим инструментом.

Вы можете игнорировать файлы из расчета покрытия, настроив файлы в .slather.yml файле в опции ignore.

Пожалуйста, найдите подробности здесь как игнорировать.

...