web-dev-qa-db-fra.com

Utilisation du type non déclaré 'ViewController' lors du test de mon propre ViewController dans Swift?

J'ai essayé d'écrire des cas de test dans Swift pour tester mon ViewController. Cependant, lorsque j'essaie d'instancier mon propre ViewController dans un XCTestCase, je reçois "Utilisation du type non déclaré 'ViewController'". (ViewController est le nom de ma propre classe UIViewController)

enter image description here

Quelqu'un at-il déjà affronté ce problème? J'utilise Xcode 6 beta 5

22
hoomi

Swift 1

Vous devez ajouter l'appartenance cible du fichier ViewController.Swift également comme cible de test, même si vous n'utilisez pas de structure. Sélectionnez le fichier de classe à ajouter à la cible comme indiqué dans l'image:

enter image description here

OU 

Si ViewController est dans une structure: ViewController class est dans une cible différente et vous ne déclarez pas une classe avec un niveau d'accès public. Par défaut, les classes sont internes (accessibles dans une cible). Déclarez-le comme public et rendez également les méthodes ou propriétés publiques si vous souhaitez y accéder, c.-à-d. 

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 Mise à jour

Dans votre cible de test, importez simplement le module que vous souhaitez tester à l'aide du mot clé @testable:

@testable import moduleToTest

Vous pouvez maintenant accéder aux symboles public et internal dans votre cible de test.

Test d'unité Swift 2 Xcode 7

46
Yatheesha B L

J'ai également récemment eu cette erreur et aucune des étapes ci-dessus n'a résolu le problème. La suppression du fichier non-Swift de la phase de construction des sources Compile dans la cible sur laquelle vous souhaitez exécuter les tests a été résolue. 

Assurez-vous que votre application est en train de compiler. Cela échouait silencieusement et le message d'erreur n'était pas utile

 enter image description here

2
amleszk

Dans Swift 4, vous pouvez créer une nouvelle cible de test unitaire. Cette cible doit être importée comme indiqué ci-dessous.

Afin de tester toute logique à l'intérieur du contrôleur de vue, vous devez y avoir une référence. Ainsi, pour accéder au viewController, vous devez d'abord faire référence au storyboard, comme indiqué ci-dessous.

// 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

Le code précédent doit être inséré dans la méthode setUp, cette méthode est appelée chaque fois que le test unitaire est en cours d'exécution. Notez que viewController est une variable définie dans la classe XCTestCase comme indiqué dans la capture d'écran ci-dessous.

Pour l'instant, vous pouvez accéder à toute logique définie dans la classe viewController en appelant viewController.funCode ou viewController.variable.

entrez la description de l'image ici

NE PAS OUBLIER: pour pouvoir atteindre le contrôleur de vue par storyboard, vous devez l'identifier. pour ce faire, vous devez aller dans le storyboard, puis sélectionner le viewController, puis à partir du panneau de droite, aller à "afficher l'inspecteur d'identité" et définir une valeur pour le storyboard ID = 'ViewController'

Pour plus d'informations, veuillez consulter: https://github.com/msabukwaik/networking-example

0
Mohammed S A Kwaik