Использование необъявленного типа "ViewController" при модульном тестировании моего собственного ViewController в Swift?
Я пытаюсь написать тестовые примеры в Swift для проверки моего ViewController. Однако, когда я пытаюсь создать экземпляр собственного ViewController в XCTestCase, я получаю "Использование необъявленного типа" ViewController ". (ViewController - это имя моего собственного класса UIViewController)
![enter image description here]()
Кто-нибудь еще сталкивался с этой проблемой раньше? Я использую Xcode 6 beta 5
Ответы
Ответ 1
Swift 1
Вы также должны добавить целевое членство в ViewController.swift и свою целевую аудиторию, если вы не используете фреймворк. Выберите файл класса, добавляемый к цели, как показано на изображении:
![enter image description here]()
ИЛИ
Если вы ViewController находится в рамках: ViewController
класс находится в разных целях, и вы не объявляете класс с общедоступным уровнем доступа. По умолчанию Классы являются внутренними (доступно в пределах цели). Объявите его общедоступным, а также сделайте методы или свойства общедоступными, если вы хотите получить к нему доступ. I.e
public class ViewController: UIViewController {
public var content: String!
override public func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override public func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
Обновление Swift 2
В тестовой цели просто импортируйте модуль, который вы хотите протестировать, с помощью ключевого слова @testable
:
@testable import moduleToTest
Теперь вы можете получить доступ к символам public
и internal
в тестовой цели.
быстрое 2 тестирование Xcode 7
Ответ 2
Я также получил эту ошибку недавно, и ни один из вышеупомянутых шагов не устранила проблему, что же это исправить удаляло, не быстрый файл из <сильного > Compile источники построить фазу в Target вы хотите запустить тесты на.
Убедитесь, что приложение действительно компилируется. Это терпело неудачу, и сообщение об ошибке было не полезно
![введите описание изображения здесь]()
Ответ 3
В быстрой версии 4 вы можете создать новую цель unit test, она должна импортировать выбранную вами цель, как указано ниже
Чтобы протестировать любую логику в контроллере представления, вы должны иметь ссылку на нее, чтобы, чтобы добраться до viewController, вы должны сначала ссылаться на раскадровку, как указано ниже.
// Put setup code here. This method is called before the invocation of each test method in the class.
let storyBoard = UIStoryboard(name: "Main", bundle: Bundle.main)
viewController = storyBoard.instantiateViewController(withIdentifier: "ViewController") as! ViewController
_ = viewController.view
Предыдущий код должен быть вставлен внутри метода setUp, этот метод вызывается каждый раз при запуске unit test. Обратите внимание: viewController - это переменная, определенная внутри класса XCTestCase, как указано на скриншоте, прилагаемом ниже.
Теперь вы можете получить доступ к любой логике, определенной внутри класса viewController, вызывая viewController.funCode или viewController.variable
введите здесь описание изображения
НЕ ЗАБУДЬТЕ: чтобы получить доступ к контроллеру представления с помощью раскадровки, вы должны идентифицировать. чтобы сделать это, вы должны перейти в раскадровку, затем выберите viewController, затем с правой панели перейдите к "показать инспектору идентификации" и установите значение для идентификатора раскадровки = "ViewController"
Для получения дополнительной информации, пожалуйста, взгляните на: https://github.com/msabukwaik/networking-example