В чем разница между импортом цели в модульное тестирование и включением этого файла в целевое членство? - PullRequest
0 голосов
/ 27 июня 2018

Когда я пишу тесты, я могу сделать:

@testable import TestProduct

Чем вышеизложенное отличается от добавления тестового файла к определенной цели?

enter image description here

В конечном счете, мой вопрос: если бы я сделал свой unitTests целью для всех моих файлов ... это было бы эквивалентно выполнению:

@testable import TestProduct

Если нет, то в чем разница?

Ответы [ 3 ]

0 голосов
/ 27 июня 2018

Из Swift docs под заголовком Уровни доступа для целей модульного тестирования (выделение добавлено)

Когда вы пишете приложение с целью модульного тестирования, код в вашем приложении должен быть доступен этому модулю для тестирования. По умолчанию только объекты, помеченные как открытые или открытые, доступны для других модулей. Однако цель модульного теста может получить доступ к любой внутренней сущности, если вы пометите объявление импорта для модуля продукта атрибутом @testable и скомпилируете этот модуль продукта с включенным тестированием.

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

0 голосов
/ 27 июня 2018

Target - это конечный продукт, созданный путем запуска "build" в Xcode. Это может быть приложением, или фреймворком, или статической библиотекой, или комплектом модульных тестов.

Таким образом, какой бы файл вы ни добавили к определенной цели, он будет создан xcode и добавлен в конечный продукт для этой цели.

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

И когда вы пишете нижеприведенную строку, она просто разрешает вашей цели тестирования получить доступ к внутренним файлам TestProduct

@testable import TestProduct

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

0 голосов
/ 27 июня 2018

Мед. @testable import YourAppModuleName существует в ваших тестах - модульное тестирование. Это позволит выставить любые общедоступные и стандартные символы для ваших тестов. частные символы по-прежнему недоступны. Это в настройках сборки.

Создайте новый файл в тестовой цели и присвойте ему имя, например, MyFirstSpec.swift. Поместите этот контент в него. ИЛИ ЖЕ Создайте целевую структуру. Если вы не большой поклонник дублирования файлов, вы можете создать целевой фреймворк, включающий исходные файлы, которые вы хотите протестировать. Также вы можете отослать это на github для автоматизации: https://github.com/johnsundell/playground

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...