Ответ 1
Вам нужно импортировать свой прикладной модуль в unit test. Обычно это имя приложения. Например, если ваше имя приложения GeoRssParser
, оператор import
будет выглядеть следующим образом:
import GeoRssParser
У меня есть стандартный класс класса GeoRssParserDelegate, который необходимо протестировать.
В моем быстром unit test у меня есть это:
func testParser()
{
var bundle = NSBundle(forClass:GeoRssParserTest.classForKeyedArchiver())
var path = bundle.pathForResource("test", ofType: "xml")
let data = NSData.dataWithContentsOfFile(path, options: NSDataReadingOptions.DataReadingMapped, error: nil)
let xmlParser = NSXMLParser(data:data)
let delegate = GeoRssParserDelegate() <-- Compiler fails here
var bStatus = xmlParser.parse()
XCTAssertTrue(bStatus, "Parse failed", file: __FILE__, line: __LINE__)
}
Компилятор не работает в строке, выделенной выше. Ошибка компилятора: использование неразрешенного idenitifier GeorRssParserDelegate
Этот класс существует и строится с самим продуктом. Требуется ли что-то специальное?
Вам нужно импортировать свой прикладной модуль в unit test. Обычно это имя приложения. Например, если ваше имя приложения GeoRssParser
, оператор import
будет выглядеть следующим образом:
import GeoRssParser
Если тестируемый класс скомпилирован в другую цель (например, ваше приложение, в отличие от тестового пакета), убедитесь, что класс или структура, которую вы пытаетесь использовать, отмечена public
- видимость доступа по умолчанию не позволяет проводить перекрестное тестирование.
Если вы используете новый XCode 7 (по состоянию на 21 июля 2015 года), просто напишите:
@testable import GeoRssParserDelegate
Источник: http://natashatherobot.com/swift-2-xcode-7-unit-testing-access/
Решение для Xcode 8/9, которое работает для меня:
@testable import Product_Module_Name
note: не имя цели, а название продукта.
Что касается ответов выше: создание без @testable
потребует публиковать классы и методы, которые меняют дизайн архитектуры приложения. если вы не хотите менять его лучше, чтобы использовать это решение, поэтому вам не нужно делать изменения в общедоступном классе или нет.
Большое спасибо этому answer
Просто добавьте класс, который вы тестируете в Target → Build Phases → Compile Sources
Как я исправил свою проблему.
Сделайте следующие 3 шага → 1. Введите @testable import Your_Project_name 2. Затем сохраните (CTRL + S) 3. Затем постройте (CTRL + B)