Подтвердить что ты не робот

Использование необъявленного типа "ViewController" при модульном тестировании моего собственного ViewController в Swift?

Я пытаюсь написать тестовые примеры в Swift для проверки моего ViewController. Однако, когда я пытаюсь создать экземпляр собственного ViewController в XCTestCase, я получаю "Использование необъявленного типа" ViewController ". (ViewController - это имя моего собственного класса UIViewController)

enter image description here

Кто-нибудь еще сталкивался с этой проблемой раньше? Я использую Xcode 6 beta 5

4b9b3361

Ответ 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